所以我尝试将原始文件中的数据更新为新的临时文件,然后删除原始文件并使用原始文件的名称重命名临时文件,如下所示:
#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(&#34; temp.txt&#34;,&#34; w&#34;); to temp = fopen(&#34; temp.txt&#34;,&#34; ab +&#34;);但是Original.txt的信息最终没有空格或新的行(全部在一起)。与&#34; wb&#34;
相同&#34; RB&#34; Original.txt文件消失。
如果有必要,可以添加整个代码,尽管我不认为它的重要性
答案 0 :(得分:2)
当您执行fopen (path, "w")
时,它会截断path
指向的文件。然后关闭该文件。因此,基本上,你的&#34; temp.txt&#34;是fclose (temp)
行后面的空文件。摆脱&#34; w +&#34;和&#34; w&#34;因为它们会截断文件(使其长度为零)。
请参阅man fopen
w将文件截断为零长度或创建用于写入的文本文件。 流位于文件的开头。
w +开放阅读和写作。如果文件不存在,则创建该文件,否则将被截断。流定位 在文件的开头。
您根本不需要打开和/或关闭文件。如果您看到remove
和rename
完全没有使用前一部分代码。另请检查man rename
和man remove
。如果你想知道文件是否存在。检查这些功能的返回值。如果出现错误,您可以随时检查errno
以了解究竟出了什么问题。 (有关详细信息,请参阅联机帮助页。)
答案 1 :(得分:1)
不确定你要做什么,但根据你的问题,你只需要&#34; r&#34;阅读模式。
fptr = fopen("Original.txt", "r");
此外,有几条建议,但没有回答你的问题:
您正在检查fptr == NULL
,但仍在继续写入数据?如果fptr == NULL
为真且您尝试从NULL指针读取怎么办?除了输入错误消息之外,还要设置一个return -1
或其他东西,以便该程序不会继续进行此操作。
您也应该检查temp == NULL
,以检测文件是否也已打开以进行写入。如果temp == NULL
为真并且您尝试写入NULL指针,该怎么办?