【发布时间】:2018-10-30 09:01:03
【问题描述】:
所以我正在尝试将数据从原始文件更新到一个新的临时文件,然后我删除原始文件并用原始文件的名称重命名临时文件,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(){
FILE * fptr = NULL;
FILE * temp;
fptr = fopen("Original.txt", "rw+");
temp = fopen("temp.txt", "w");
if(fptr==NULL)//Check if file was opened successfully
{
printf("File could not be opened");
}
//cicle of me adding data to temp file
fclose(fptr);
fclose(temp);
remove("Original.txt");
rename("temp.txt","Original.txt");
return 0;
}
它第一次工作,但是当我再次执行时,Original.txt 最终为空白。是什么原因造成的?
我试过改变 temp = fopen("temp.txt", "w"); to temp = fopen("temp.txt", "ab+");但是 Original.txt 的信息最终没有空格或新行(全部在一起)。和“wb”一样
"rb" Original.txt 文件消失。
如果有必要,我会添加整个代码,虽然我认为它不相关
【问题讨论】:
-
为什么要打开和关闭文件?
-
@phoxis 从我了解到的人们关闭文件然后他们删除或重命名
-
rw+有未定义的行为! -
为什么检查
fptr为NULL,却不检查temp的状态?打开写入也可能失败。此外,错误消息应解释调用失败的原因,并写入标准错误。if( (fp = fopen(path, mode)) == NULL ) { perror(path); ...}