以下是我打开文件的方式+:
if( fopen_s( &f, fileName, "w+" ) !=0 ) {
printf("Open file failed\n");
return;
}
fprintf_s(f, "content");
如果文件不存在,则打开操作失败。如果我想在文件尚不存在的情况下自动创建文件,fopen
的正确方法是什么?
编辑:如果文件确实存在,我希望fprintf覆盖该文件,而不是附加到它。
答案 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
功能。除了以下情况之外,首先没有什么意义:
原始函数要么写入传入缓冲区,要么没有参数来指定缓冲区的大小(例如strcat()
),或
允许/需要原始函数返回指向静态缓冲区的指针(例如strerror()
),这使得
并且这些功能是不可移植的。简而言之,大多数这些功能(包括fopon_s()
)都是无法使用的 - 使用它们会使您的程序不那么便携但却没有任何好处。 (C的不兼容附录只会让事情变得更糟 - 除非MS实现它,在这种情况下它可能只会让事情变得更加混乱。)