下面是我打开文件进行写入的方法:
if( fopen_s( &f, fileName, "w+" ) !=0 ) {
printf("Open file failed\n");
return;
}
fprintf_s(f, "content");
如果文件不存在,则打开操作失败。如果我想要自动创建文件(如果文件尚不存在),那么使用
fopen
的正确方法是什么?编辑:如果文件已存在,我希望
fprintf
覆盖文件,而不是在文件中追加内容。要覆盖任何现有文件,请使用creat
调用:
#include <fcntl.h>
#include <stdio.h>
int fd = creat (fileName, 0666); // creates file if not exist, overwrite existing
FILE *f = fdopen (fd, "w"); // optional, if FILE * type desired
fopen(name, "w")
吗?此外,你应该扩展你的代码,报告正在发生的错误,例如使用perror()
。_s
函数,尽管有警告。首先,在以下情况下使用它们几乎没有意义:strcat()
)。
2. 原始函数被允许/需要返回指向静态缓冲区的指针(例如strerror()
),这使得这些函数不可移植。fopon_s()
)都是毫无意义的非可移植的——使用它们会使你的程序不太容易移植,但没有任何好处。(C的不兼容附录只会让事情变得更糟——除非MS实现它,否则它可能只会让事情更加混乱。)
w+
已经是正确的模式:它会打开一个空文件,无论文件是否已经存在,可以进行读写操作。您需要查看fopen_s()
的非零返回值以了解调用失败的原因。如果您不需要随机访问(您可能不需要),则只需使用w
作为模式即可。 - RBerteig