我需要在现有文件中的45 th 字节之前添加一个字符串。我尝试使用fseek
,如下所示。
int main()
{
FILE *fp;
char str[] = "test";
fp = fopen(FILEPATH,"a");
fseek(fp,-45, SEEK_END);
fprintf(fp,"%s",str);
fclose(fp);
return(0);
}
我希望这段代码会在EOF的45 th 字符之前添加“test”,而只是将“test”附加到EOF。
请帮我找到解决方案。
这是我之前的问题的延续 Append item to a file before last line in c
答案 0 :(得分:11)
使用模式r +(如果已存在)或+(如果它不存在并且您想要创建它)打开它。由于你在文件结束之前寻找45个字节,我假设它已经存在。
fp = fopen(FILEPATH,"r+");
你的其余代码很好。另请注意,这不会插入文本,但会覆盖文件中当前位置的任何内容。
即,如果您的文件如下所示:
xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
然后在运行此代码后,它将如下所示:
xxxxxxxtestxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxx
如果你真的想插入而不是覆盖,那么你需要将SEEK_END-45到EOF的所有文本都读到内存中,写下 test 然后再写回来
答案 1 :(得分:3)
如果您计划在任意位置书写,请不要将其作为追加(a
)打开;它会强制所有写入到文件末尾。您可以使用r+
在任何地方阅读或书写。
答案 2 :(得分:0)
要避免特定于平台的配置,请始终在fopen()调用中明确指出二进制或文本模式。
如果您将代码移植一天,这将为您节省数小时的绝望。