如何以这样的方式打开文件:如果文件不存在,它将自动创建和打开?

时间:2010-12-27 16:53:27

标签: c file-io fopen

以下是我打开文件的方式+:

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

如果文件不存在,则打开操作失败。如果我想在文件尚不存在的情况下自动创建文件,fopen的正确方法是什么?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您是否尝试过fopen(name, "w")?此外,您应该扩展您的代码以报告使用例如错误发送的信息。 perror()

注意

顺便提一下,尽管有警告,我仍会避免(至少大部分)MSVC的_s功能。除了以下情况之外,首先没有什么意义:

  1. 原始函数要么写入传入缓冲区,要么没有参数来指定缓冲区的大小(例如strcat()),或

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

  3. 并且这些功能是不可移植的。简而言之,大多数这些功能(包括fopon_s())都是无法使用的 - 使用它们会使您的程序不那么便携但却没有任何好处。 (C的不兼容附录只会让事情变得更糟 - 除非MS实现它,在这种情况下它可能只会让事情变得更加混乱。)