fflush的问题

rabbitjerry 2013-12-25 10:37:53
使用fwrite频繁写文件,每次写固定的几十个字节,写完之后都用fflush函数刷新缓冲区。
这样会造成文件错误吗?
我在具体实行的时候,查看文件的二进制数据,发现每次写的数据包多了一个字节。
请问是fflush造成的结果吗?
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2013-12-26
  • 打赏
  • 举报
回复
可能是以文本方式打开,这样写入'\n'时会多一个'\r'字节。
引用 楼主 rabbitjerry 的回复:
使用fwrite频繁写文件,每次写固定的几十个字节,写完之后都用fflush函数刷新缓冲区。 这样会造成文件错误吗? 我在具体实行的时候,查看文件的二进制数据,发现每次写的数据包多了一个字节。 请问是fflush造成的结果吗?
d4shman 2013-12-26
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 “多一少一”问题占程序员常犯错误的10%以上!
赵老师总结的到位。
叶之香 2013-12-26
  • 打赏
  • 举报
回复
引用 2 楼 KenZhang1031 的回复:
fflush是把缓存写到硬盘的,不会引起你说的错误。要查查程序。
你的这个说法是不正确的,fflush只是将c的文件缓存刷新到系统层,而真正将系统层的文件缓存刷新到磁盘的是其他函数的功能_commit(Windows)/fsync(linux)
赵4老师 2013-12-26
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 不要把 fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待 弄混了 “多一少一”问题占程序员常犯错误的10%以上!
mujiok2003 2013-12-26
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
可能是以文本方式打开,这样写入'\n'时会多一个'\r'字节。 [quote=引用 楼主 rabbitjerry 的回复:] 使用fwrite频繁写文件,每次写固定的几十个字节,写完之后都用fflush函数刷新缓冲区。 这样会造成文件错误吗? 我在具体实行的时候,查看文件的二进制数据,发现每次写的数据包多了一个字节。 请问是fflush造成的结果吗?
[/quote] ++ 试试二进制方式。
Mr. Code 2013-12-25
  • 打赏
  • 举报
回复
fflush是把缓存写到硬盘的,不会引起你说的错误。要查查程序。
ForestDB 2013-12-25
  • 打赏
  • 举报
回复
不会。 不是。 你的fwrite怎么调的?(代码呢?) 你的几十个字节怎么来的?(代码呢?)

69,382

社区成员

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

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