FILE file;
string m_strname=getfile_name();//获取目录
cout<<m_strname<<endl; //打印出目录 /mnt/1970-01-01 05:17:56.mp4
file = fopen(m_strname.c_str(),"ab++");
if(file==NULL)
{
printf("open faile\n");
}
}
不知道为什么老是打开不成功open faile,是不是这边少了什么东西啊?请 厉害的高手指教一下。、
15 个解决方案
#1
“ab+”
#2
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。
#3
file = fopen(m_strname.c_str(),"ab++");
-》
file = fopen(m_strname.c_str(),"ab+");
-》
file = fopen(m_strname.c_str(),"ab+");
#4
没有用啊,不是ab++和ab+的问题,问什么就fopen失败呢??
#5
找到原因了,fopen里面的目录是不能有"-"或者“:”的。
#6
NAME
fopen - open a stream
SYNOPSIS
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
DESCRIPTION
The fopen() function opens the file whose pathname is the
string pointed to by filename, and associates a stream with
it.
The argument mode points to a string beginning with one of
the following sequences:
r or rb Open file for reading.
w or wb Truncate to zero length or create file
for writing.
a or ab Append; open or create file for writing
at end-of-file.
r+ or rb+ or r+b Open file for update (reading and writ-
ing).
w+ or wb+ or w+b Truncate to zero length or create file
for update.
a+ or ab+ or a+b Append; open or create file for update,
writing at end-of-file.
#7
file = fopen(m_strname.c_str(),"ab++");
if(file==NULL)
{
fprintf(stderr, "open file :%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>
if(file==NULL)
{
fprintf(stderr, "open file :%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>
#8
楼上说的很对,先打印错误提示,看看哪里出了问题,然后针对问题去改,还有,一般的读写失败,不是因为文件不存在,就是没有权限,linux下最主要的就是权限问题,所以第一个优先检查权限。
#9
楼主把完整的代码,贴出来叫我们学习下...
#10
FILE file;“ab++”;改为
FILE *file;“ab+”;
#11
1)"ab++"-->"ab+";
2)如果还不行,改改目录权限。
2)如果还不行,改改目录权限。
#12
ab++ 改为ab+
lz最好做个返回判断!
lz最好做个返回判断!
#13
楼主怎么改好的啊
#14
找到原因了,fopen里面的目录是不能有"-"或者“:”的。
#15
这个应该是对的把,为什么楼主直接用的FILE file呢??不是应该是指针的吗?
#1
“ab+”
#2
1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。
r(read): 读
w(write): 写
a(append): 追加
t(text): 文本文件,可省略不写
b(banary): 二进制文件
+: 读和写
2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
4. 若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
如果成功的打开一个文件, fopen()函数返回文件指针, 否则返回空指针
(NULL)。由此可判断文件打开是否成功。
#3
file = fopen(m_strname.c_str(),"ab++");
-》
file = fopen(m_strname.c_str(),"ab+");
-》
file = fopen(m_strname.c_str(),"ab+");
#4
没有用啊,不是ab++和ab+的问题,问什么就fopen失败呢??
#5
找到原因了,fopen里面的目录是不能有"-"或者“:”的。
#6
NAME
fopen - open a stream
SYNOPSIS
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
DESCRIPTION
The fopen() function opens the file whose pathname is the
string pointed to by filename, and associates a stream with
it.
The argument mode points to a string beginning with one of
the following sequences:
r or rb Open file for reading.
w or wb Truncate to zero length or create file
for writing.
a or ab Append; open or create file for writing
at end-of-file.
r+ or rb+ or r+b Open file for update (reading and writ-
ing).
w+ or wb+ or w+b Truncate to zero length or create file
for update.
a+ or ab+ or a+b Append; open or create file for update,
writing at end-of-file.
#7
file = fopen(m_strname.c_str(),"ab++");
if(file==NULL)
{
fprintf(stderr, "open file :%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>
if(file==NULL)
{
fprintf(stderr, "open file :%s\n", strerror(errno));
exit(EXIT_FAILURE);
}
把你的代码修改一下,这样可以打印出错的原因。注意需要添加头文件:
#include <string.h>
#include <errno.h>
#8
楼上说的很对,先打印错误提示,看看哪里出了问题,然后针对问题去改,还有,一般的读写失败,不是因为文件不存在,就是没有权限,linux下最主要的就是权限问题,所以第一个优先检查权限。
#9
楼主把完整的代码,贴出来叫我们学习下...
#10
FILE file;“ab++”;改为
FILE *file;“ab+”;
#11
1)"ab++"-->"ab+";
2)如果还不行,改改目录权限。
2)如果还不行,改改目录权限。
#12
ab++ 改为ab+
lz最好做个返回判断!
lz最好做个返回判断!
#13
楼主怎么改好的啊
#14
找到原因了,fopen里面的目录是不能有"-"或者“:”的。
#15
这个应该是对的把,为什么楼主直接用的FILE file呢??不是应该是指针的吗?