如何以一种方式打开文件,使得如果文件不存在,它会自动创建并打开?

3

下面是我打开文件进行写入的方法:

if( fopen_s( &f, fileName, "w+" ) !=0 ) {
    printf("Open file failed\n");
    return;
}
fprintf_s(f, "content");

如果文件不存在,则打开操作失败。如果我想要自动创建文件(如果文件尚不存在),那么使用 fopen 的正确方法是什么?
编辑:如果文件已存在,我希望 fprintf 覆盖文件,而不是在文件中追加内容。

模式 w+ 已经是正确的模式:它会打开一个空文件,无论文件是否已经存在,可以进行读写操作。您需要查看 fopen_s() 的非零返回值以了解调用失败的原因。如果您不需要随机访问(您可能不需要),则只需使用 w 作为模式即可。 - RBerteig
@RBerteig:谢谢。您能否提供一个代码示例,演示如何使用fopen_s()返回值来创建一个新文件,以防文件不存在? - snakile
2个回答

2

要覆盖任何现有文件,请使用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

2
你尝试过只使用fopen(name, "w")吗?此外,你应该扩展你的代码,报告正在发生的错误,例如使用perror()
注意:
顺便说一下,我会避免(至少大部分)MSVC的_s函数,尽管有警告。首先,在以下情况下使用它们几乎没有意义:
1. 原始函数写入传入的缓冲区,但没有参数指定缓冲区的大小(例如strcat())。 2. 原始函数被允许/需要返回指向静态缓冲区的指针(例如strerror()),这使得这些函数不可移植。
这些函数都是非可移植的。简而言之,大多数这些函数(包括fopon_s())都是毫无意义的非可移植的——使用它们会使你的程序不太容易移植,但没有任何好处。(C的不兼容附录只会让事情变得更糟——除非MS实现它,否则它可能只会让事情更加混乱。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接