把嘎嘎 2021-06-02 11:52 采纳率: 46.4%
浏览 132
已结题

C语言文件io操作,从文件中间写入

有一个txt文件,内容:

123456789

 

现在想将45替换成ab,有办法对这个txt文件直接操作吗?

  • 写回答

3条回答 默认 最新

  • bostonAlen 2021-06-02 15:19
    关注
    如果只想修改文件一部分。
    可以使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。
    文件指针的位置决定你读写文件的起始位置。
    其中参数origin :表示从哪里开始偏移,值有:
    SEEK_SET: 文件开头
    SEEK_CUR: 当前位置
    SEEK_END: 文件结尾
    参数offset:表示偏移的字节数,正数表示正向偏移,负数表示负向偏移。
    比如
    你先读取文件内容,同时做判断,找到你要改的内容时,调用函数
    fseek(fp,10L,SEEK_CUR);把文件指针移动到离当前指针位置10个字节的地方(我们假设当前位置偏移10个字节就是你要修改的起始位置);
    这样你之后的读写都是从这个位置开始。
    不过要注意的是,你从这位置开始写新的内容,可以覆盖原内容,所以如果新的内容比你想覆盖的内容长的话,会把后面你想保留的内容也覆盖掉。
    这种思路,你想要实现修改指定内容,还需要把修改内容之后的数据也读出来备份,再一起写进去。
    所以最简单,还是直接生成新的文件替换原文件。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月9日

悬赏问题

  • ¥15 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 qiankun主应用注册子应用提示跨域
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?
  • ¥15 快手小店商家版APP怎么第三方APP跳转到指定用户聊天界面
  • ¥15 为什么AVL fire软件仿真时的步长改变了,仿真结果也会改变
  • ¥100 如何帮我写一个java小游戏