我需要在现有文件中的第 45 个字节之前添加一个字符串。 我尝试使用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 个字符之前添加“test”,相反,它只是将“test”附加到EOF。
请帮我找到解决方案。
这是我之前的问题的延续
将项添加到c中最后一行之前的文件中
使用模式r +(如果已存在)或+(如果它不存在并且您想要创建它)打开它。 由于你在文件结束之前寻找45个字节,我假设它已经存在。
fp = fopen(FILEPATH,"r+");
你的其余代码很好。 另请注意,这不会插入文本,但会覆盖文件中当前位置的任何内容。
即,如果您的文件看起来像这样:
xxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
然后运行此代码后,它将如下所示:
xxxxxxxtestxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxx
如果你真的想要插入而不是覆盖,那么你需要将SEEK_END-45到EOF的所有文本读入内存,编写测试然后再写回来
如果您计划在任意位置书写,请不要将其作为附加( a
)打开; 它会强制所有写入到文件末尾。 您可以使用r+
在任何地方读取或写入。
要避免特定于平台的配置,请始终在fopen()调用中明确指出二进制或文本模式。
如果您将代码移植一天,这将为您节省数小时的绝望。
需要了解更多c/c++开发分享在c中将数据插入文件,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享在c中将数据插入文件相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979289.html