在C中以增量方式读取和写入长数据类型时出错

时间:2019-04-04 13:06:51

标签: c integer fopen read-write

我有以下代码:

up_n = lambda path, n: '/'.join(path.split('/')[:-n])

使用上述代码,我试图读取文件的内容,该内容始终存储有长值,没有别的,将值增加1,然后用新的递增值覆盖文件的lond值。但是,我试图做到这一点而不会在读/写之间关闭文件。例如,工作流/算法应如下:

os

但是,如果我使用上述代码,则输出值会将增量值附加在文件末尾,而不是覆盖。我曾尝试使用“ w +”和“ w”打开文件,但是这些当然仅适用于写入但不能如上所述读取文件。谁能知道我该怎么做才能实现目标?

2 个答案:

答案 0 :(得分:1)

答案恰好是:我需要快退将文件ponter返回到文件的索引0,以便用增加的值覆盖文件的内容。正确的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main() {
  long num = 0;
  FILE *fptr;

     if ((fptr = fopen("test_num.txt","r+")) == NULL){
         printf("Error! opening file");
         return -1;
     }

     fscanf(fptr,"%ld", &num);

     // Increment counter by 1
     num += 1;

     printf("%ld\n", num);
     rewind(fptr); // Rewind to index 0 of the fptr
     fprintf(fptr, "%ld", num);
     fclose(fptr);

     return -1;

}

答案 1 :(得分:0)

有两种重写文本文件部分的常用方法:

  1. 将while文件读入内存,进行更改,然后从头开始写回。

  2. 读取文件的各个部分(例如,逐行),即时进行更改,然后写入新的临时文件。然后将临时文件重命名为实际文件。

相关问题