因此,我尝试将数据从原始文件更新为新的临时文件,然后删除原始文件,并将临时文件重命名为原始文件的名称,如下所示:
#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”)更改为temp = fopen("temp.txt","ab+");但是Original.txt的信息在(所有这些信息)之间没有空格或新行。"wb“也是如此
"rb“Original.txt文件消失。
如果有必要的话,我会添加整个代码,尽管我不认为它很有趣
发布于 2018-05-20 15:39:22
当您执行fopen (path, "w")时,它会截断path指出的文件。然后你关闭文件。因此,从本质上说,"temp.txt“是行fclose (temp)之后的一个空文件。去掉"w+“和"w”,因为它们会截断文件(使其为零长度)。
请参阅man fopen
将文件截断为零长度,或创建用于写入的文本文件。流位于文件的开头。 w+开放阅读和写作。如果文件不存在,则创建该文件,否则文件将被截断。流位于文件的开头。
您根本不需要打开或关闭文件。如果您看到remove和rename绝对不使用代码前一部分的任何内容。还可以检查man rename和man remove。如果您想知道这些文件是否存在的话。检查这些函数的返回值。在出错的情况下,您可以随时检查errno,以了解到底出了什么问题。(详情请参阅手册)。
发布于 2018-05-23 05:29:14
不确定你到底想做什么,但取决于你的问题,你只需要阅读"r“模式。
即,fptr = fopen("Original.txt", "r");
另外,有几个建议,但没有回答你的问题:
fptr == NULL,但还是要继续编写数据吗?如果fptr == NULL是真的,并且尝试从空指针读取怎么办?除了放置错误消息外,还要放置一个return -1或其他东西,这样程序就不会在这种情况下继续运行了。temp == NULL,以检测是否也打开了用于写入的文件。如果temp == NULL是真的,并且尝试写入空指针,怎么办?https://stackoverflow.com/questions/50436403
复制相似问题