首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C错误删除和重命名文件

用C错误删除和重命名文件
EN

Stack Overflow用户
提问于 2018-05-20 15:26:46
回答 2查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
#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文件消失。

如果有必要的话,我会添加整个代码,尽管我不认为它很有趣

EN

回答 2

Stack Overflow用户

发布于 2018-05-20 15:39:22

当您执行fopen (path, "w")时,它会截断path指出的文件。然后你关闭文件。因此,从本质上说,"temp.txt“是行fclose (temp)之后的一个空文件。去掉"w+“和"w”,因为它们会截断文件(使其为零长度)。

请参阅man fopen

将文件截断为零长度,或创建用于写入的文本文件。流位于文件的开头。 w+开放阅读和写作。如果文件不存在,则创建该文件,否则文件将被截断。流位于文件的开头。

您根本不需要打开或关闭文件。如果您看到removerename绝对不使用代码前一部分的任何内容。还可以检查man renameman remove。如果您想知道这些文件是否存在的话。检查这些函数的返回值。在出错的情况下,您可以随时检查errno,以了解到底出了什么问题。(详情请参阅手册)。

票数 2
EN

Stack Overflow用户

发布于 2018-05-23 05:29:14

不确定你到底想做什么,但取决于你的问题,你只需要阅读"r“模式。

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

另外,有几个建议,但没有回答你的问题:

  1. 您正在检查fptr == NULL,但还是要继续编写数据吗?如果fptr == NULL是真的,并且尝试从空指针读取怎么办?除了放置错误消息外,还要放置一个return -1或其他东西,这样程序就不会在这种情况下继续运行了。
  2. 您还应该检查temp == NULL,以检测是否也打开了用于写入的文件。如果temp == NULL是真的,并且尝试写入空指针,怎么办?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50436403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档