删除和重命名C错误的文件

时间:2018-05-20 15:26:47

标签: c file text

所以我尝试将原始文件中的数据更新为新的临时文件,然后删除原始文件并使用原始文件的名称重命名临时文件,如下所示:

#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文件消失。

如果有必要,可以添加整个代码,尽管我不认为它的重要性

2 个答案:

答案 0 :(得分:2)

当您执行fopen (path, "w")时,它会截断path指向的文件。然后关闭该文件。因此,基本上,你的&#34; temp.txt&#34;是fclose (temp)行后面的空文件。摆脱&#34; w +&#34;和&#34; w&#34;因为它们会截断文件(使其长度为零)。

请参阅man fopen

  

w将文件截断为零长度或创建用于写入的文本文件。   流位于文件的开头。

     

w +开放阅读和写作。如果文件不存在,则创建该文件,否则将被截断。流定位   在文件的开头。

您根本不需要打开和/或关闭文件。如果您看到removerename完全没有使用前一部分代码。另请检查man renameman remove。如果你想知道文件是否存在。检查这些功能的返回值。如果出现错误,您可以随时检查errno以了解究竟出了什么问题。 (有关详细信息,请参阅联机帮助页。)

答案 1 :(得分:1)

不确定你要做什么,但根据你的问题,你只需要&#34; r&#34;阅读模式。

fptr = fopen("Original.txt", "r");

此外,有几条建议,但没有回答你的问题:

  1. 您正在检查fptr == NULL,但仍在继续写入数据?如果fptr == NULL为真且您尝试从NULL指针读取怎么办?除了输入错误消息之外,还要设置一个return -1或其他东西,以便该程序不会继续进行此操作。

  2. 您也应该检查temp == NULL,以检测文件是否也已打开以进行写入。如果temp == NULL为真并且您尝试写入NULL指针,该怎么办?