C语言打开文件的模式
浏览:2700次 出处信息
昨天写一个读取bmp文件的小程序,出现了一个bug,但是不清楚到底是什么原因。
程序是要读取一个bmp文件然后保存成Bmp文件,我发现读取的时候有小错误,保存的时候也有。保存Bmp的时候居然文件大小比原来的文件大小多了3个字节,这三个字节的差异让图片的内容有了巨大的变化。
后来自己检查才发现自己打开文件时候用的是:fopen(filename,”r+”)
而改成 fopen(filename,”wb”)后程序终于完全正常。补了一下c语言文件操作的课,才恍然大悟。默认的,c语言里面是以文本模式打开文件的,在文本模式下,读取的时候换行符会被转换成回车+换行,而保存的时候会将回车+换行保存成换行。我发现我读取8bit的颜色表的时候这样读取,而8bit位图的颜色表中正好有’0a’这个字符,16进制的’0a’即是10,而这样的’0a’会出现三次,三次都会被解释成回车加上换行,所以读取的时候会溢出,而保存的时候会多出三个字节。
故,所有的操作非文本类文件的程序最好都使用二进制模式打开和保存,否则会出现上述的问题。
参考资料:http://blog.sina.com.cn/s/blog_8c7bf19701010yat.html
建议继续学习:
- 海量小文件存储 (阅读:8556)
- 其实,文件也可以truncate (阅读:8081)
- 关于Linux的文件系统cache (阅读:5499)
- Perl 倒行分析文件方法。perl读文本文件,从末尾往前读. (阅读:5170)
- PHP:从一个大文件第N行开始读取M行 (阅读:4736)
- C/C++循环获取文件中的每行数据(别以为很简单!) (阅读:4714)
- 修改系统最大文件句柄数 (阅读:4646)
- linux file命令是如何识别文件的类型的 (阅读:4662)
- shell文件存在相关判断参数 (阅读:4323)
- 打开多个文件:linux ulimit max open files (阅读:3749)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:如此理解面向对象编程
后一篇:=的两边 >>
文章信息
- 作者:邓安良 来源: 邓安良的网络日志
- 标签: 文件
- 发布时间:2013-01-17 13:23:56
建议继续学习
近3天十大热文
-
[930] WordPress插件开发 -- 在插件使用 -
[130] 解决 nginx 反向代理网页首尾出现神秘字 -
[51] 如何保证一个程序在单台服务器上只有唯一实例( -
[51] 海量小文件存储 -
[50] 整理了一份招PHP高级工程师的面试题 -
[49] CloudSMS:免费匿名的云短信 -
[48] 全站换域名时利用nginx和javascri -
[48] 用 Jquery 模拟 select -
[47] Innodb分表太多或者表分区太多,会导致内 -
[46] ps 命令常见用法
