C 我如何打开一个文件,如果该文件没有';不存在它将自动创建并打开吗?

C 我如何打开一个文件,如果该文件没有';不存在它将自动创建并打开吗?,c,file-io,fopen,C,File Io,Fopen,下面是我如何打开文件以写入+: if( fopen_s( &f, fileName, "w+" ) !=0 ) { printf("Open file failed\n"); return; } fprintf_s(f, "content"); 如果文件不存在,则打开操作失败。如果我想在文件不存在的情况下自动创建文件,那么使用fopen的正确方法是什么 编辑:如果文件确实存在,我希望fprintf覆盖该文件,而不是附加到该文件。要覆盖任何现有文件,请使用创建调用: #i

下面是我如何打开文件以写入+:

if( fopen_s( &f, fileName, "w+" ) !=0 ) {
    printf("Open file failed\n");
    return;
}
fprintf_s(f, "content");
如果文件不存在,则打开操作失败。如果我想在文件不存在的情况下自动创建文件,那么使用
fopen
的正确方法是什么


编辑:如果文件确实存在,我希望fprintf覆盖该文件,而不是附加到该文件。

要覆盖任何现有文件,请使用
创建
调用:

#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
#包括
#包括
int fd=creat(文件名,0666);//创建文件如果不存在,覆盖现有文件
文件*f=fdopen(fd,“w”);//可选,如果需要文件*类型

您是否尝试过使用fopen(名称,“w”)?此外,您可能还应该扩展代码以报告发出信号的错误,例如使用
peror()

注 顺便说一句,尽管有警告,我还是会避免(至少大部分)MSVC的
\u
功能。除了以下情况外,没有什么意义:

  • 原始函数写入传入的缓冲区,但没有指定缓冲区大小的参数(例如
    strcat()
    ),或者

  • 允许/要求原始函数返回指向静态缓冲区的指针(例如
    strerror()
    ),这使得


  • 这些功能是不可移植的。简而言之,大多数函数(包括
    fopon_s()
    )都是不可移植的,使用它们会降低程序的可移植性,但不会带来任何好处。(不兼容的C补遗只会让事情变得更糟——除非MS实现了它,在这种情况下,它可能只会让事情变得更混乱。)

    模式
    w+
    已经是正确的模式:它会导致打开一个空文件进行读写,不管该文件是否已经存在。您需要查看
    fopen_s()
    中的非零返回值,以了解调用失败的原因。如果您不需要随机访问(而且您可能不需要),只需使用
    w
    模式即可。@RBerteig:谢谢。你能用一个代码示例来回答这个问题吗?在这个示例中,你告诉我如何使用fopen_s()返回值来创建一个新文件,以防该文件不存在?