在以下代码中,我正在搜索'。'在我的模板中粘贴后面的字符串。出于某种原因,虽然字符串按预期粘贴,但它会从我的模板中删除一些文本。我不知道问题出在哪里。尝试fflush()效果不佳。
#include <stdio.h>
#include <string.h>
int main() {
FILE * fp;
int tmp_char, tmp_offset;
char file_name[50] = "FileIoTest_template.txt";
char tmp_string1[50] = "Generic String 1";
char tmp_string2[50] = "Generic String 2";
long tmp_long;
fp = fopen(file_name, "r+");
//fseek(fp, 0, SEEK_SET);
do {
tmp_char = fgetc(fp);
printf("%c ", tmp_char);
if (tmp_char == '.')
break;
} while (tmp_char != EOF);
tmp_long = ftell(fp);
fseek(fp, tmp_long, SEEK_SET);
tmp_offset = strlen(tmp_string1);
fputs(tmp_string1, fp);
fputs("\n", fp);
//fflush(fp);
fseek(fp, tmp_long+tmp_offset, SEEK_SET);
do {
tmp_char = fgetc(fp);
printf("%c ", tmp_char);
if (tmp_char == '.')
break;
} while (tmp_char != EOF);
tmp_long = ftell(fp);
fseek(fp, tmp_long, SEEK_SET);
fputs(tmp_string2, fp);
fputs("\n", fp);
//fflush(fp);
fclose(fp);
return 0;
}
这是我的模板,&#34; FileIoTest_template.txt&#34;:
Sample list:
1.
2.
3.
random text
4.
5.
6.
bunch of random text
我的代码输出是:
Sample list:
1.Generic String 1
ext
4.Generic String 2
of random text
答案 0 :(得分:2)
您无法通过将数据插入其中间来轻松修改文件,而无需替换已存在的任何内容。您需要覆盖整个文件,从插入点到结尾(通过原始结束到新端需要的任何点)。这样做是很棘手的,尝试是不安全的,因为如果进程在中间被中断,那么你的文件就会被破坏。
通常,人们会在临时文件中创建新版本的文件内容,一旦成功完成,就会用新文件替换原始文件。