我有以下代码:
up_n = lambda path, n: '/'.join(path.split('/')[:-n])
使用上述代码,我试图读取文件的内容,该内容始终存储有长值,没有别的,将值增加1,然后用新的递增值覆盖文件的lond值。但是,我试图做到这一点而不会在读/写之间关闭文件。例如,工作流/算法应如下:
os
但是,如果我使用上述代码,则输出值会将增量值附加在文件末尾,而不是覆盖。我曾尝试使用“ w +”和“ w”打开文件,但是这些当然仅适用于写入但不能如上所述读取文件。谁能知道我该怎么做才能实现目标?
答案 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)
有两种重写文本文件部分的常用方法:
将while文件读入内存,进行更改,然后从头开始写回。
读取文件的各个部分(例如,逐行),即时进行更改,然后写入新的临时文件。然后将临时文件重命名为实际文件。