C++文件中用了fopen,fwrite,fclose但是程序运行完以后文件内容仍未改变

Kcuebi 2017-09-06 06:52:47
想到C++兼容C就在里面用了fopen以rb模式打开文件,fseek定位后用fwrite往文件中写入数据替换原有内容,调试时看打开文件的文件描述符中已经可以看到其中内容变成了我改写后的内容,用fclose关掉文件,可是程序运行完后打开文件看还是没改变,有没有大神知道这是哪里出错
...全文
448 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kcuebi 2017-09-07
  • 打赏
  • 举报
回复
引用 4 楼 cfjtaishan 的回复:
因为rb是只读二进制形式打开文件,所以不能写成功;建议使用rb+形式打开文件,这样文件就可以读也可以写了。
确实应该以rb+打开,不过还有一个莫名其妙的毛病就是,文件内部的指针会莫名奇妙跑偏,ftell获取到的位置明明是对的,可是读和写的时候就不知道指到哪里去了,后来发现用ftell的返回值,fseek(fp, ftell(fp), SEEK_CUR)一下,再读或写就是对的了,这又是什么毛病
开心秋水 2017-09-06
  • 打赏
  • 举报
回复
你是以二进制的方式写入的, 所以人无法识别其中的内容, 如果人要查看其中的内容, 请不要使用二进制方式打开文件
IT保安 2017-09-06
  • 打赏
  • 举报
回复
我也顶4楼,
jena_wy 2017-09-06
  • 打赏
  • 举报
回复
引用 4 楼 cfjtaishan 的回复:
因为rb是只读二进制形式打开文件,所以不能写成功;建议使用rb+形式打开文件,这样文件就可以读也可以写了。
顶一个
倚栏|听风 2017-09-06
  • 打赏
  • 举报
回复
顶楼上
自信男孩 2017-09-06
  • 打赏
  • 举报
回复
因为rb是只读二进制形式打开文件,所以不能写成功;建议使用rb+形式打开文件,这样文件就可以读也可以写了。
kuangbao9 2017-09-06
  • 打赏
  • 举报
回复
打开的时候模式对不?
Kcuebi 2017-09-06
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
搞错了文件名
不大可能吧,文件名错了连文件都打不开,我这里文件是打开成功的,也能在调试的时候从文件指针那里看到里面内容的改变,就是程序运行完后再打开文件看内容没有变
ckc 2017-09-06
  • 打赏
  • 举报
回复
搞错了文件名
Jiao319 2017-09-06
  • 打赏
  • 举报
回复
骗个分 r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。 所以楼主应该以r+b模式打开文件。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧