如果文件不存在,则创建一个文件
我希望我的程序在存在的情况下打开文件,或者创建文件。 我想下面的代码,但我在freopen.c得到一个调试断言。 我会使用fclose更好,然后立即打开吗?
FILE *fptr;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
freopen("scores.dat", "wb", fptr);
}
您通常必须在单个系统调用中执行此操作,否则您将获得竞争条件。
这将打开阅读和写作,如有必要创建文件。
FILE *fp = fopen("scores.dat", "ab+");
如果你想读它,然后从头开始写一个新版本,那么分两步来完成。
FILE *fp = fopen("scores.dat", "rb");
if (fp) {
read_scores(fp);
}
// Later...
// truncates the file
FILE *fp = fopen("scores.dat", "wb");
if (!fp)
error();
write_scores(fp);
如果fptr
为NULL
,那么你没有打开的文件。 因此,你不能freopen
,你应该刚刚fopen
它。
FILE *fptr;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
fptr = fopen("scores.dat", "wb");
}
注意 :由于程序的行为取决于文件是以读取模式还是写入模式打开,因此您可能还需要保留一个变量,指出是哪种情况。
一个完整的例子
int main()
{
FILE *fptr;
char there_was_error = 0;
char opened_in_read = 1;
fptr = fopen("scores.dat", "rb+");
if(fptr == NULL) //if file does not exist, create it
{
opened_in_read = 0;
fptr = fopen("scores.dat", "wb");
if (fptr == NULL)
there_was_error = 1;
}
if (there_was_error)
{
printf("Disc full or no permissionn");
return EXIT_FAILURE;
}
if (opened_in_read)
printf("The file is opened in read mode."
" Let's read some cached datan");
else
printf("The file is opened in write mode."
" Let's do some processing and cache the resultsn");
return EXIT_SUCCESS;
}
链接地址: http://www.djcxy.com/p/54563.html
上一篇: Create a file if one doesn't exist
下一篇: fopen() returning a NULL pointer, but the file definitely exists