Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1362732
  • 博文数量: 118
  • 博客积分: 3888
  • 博客等级: 中校
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 18:15
个人简介

一看二做三总结

文章分类

全部博文(118)

分类: C/C++

2011-08-07 19:38:33

    今天做了个小程序,把一个二进制文件分割为多个1.44M的文件,但分割完成后,发现很多文件的大小都超过1.44M。在网上搜索了下,发现是调用fopen时传入的参数有问题。
    “w”表示为文本文件。用则会把文件中的“0A”变为“0D0A”,因为某些文件系统认为“0A”为文本文件的换行符,windows认为“0D0A”为文本文件的换行符,为了兼容其他文件系统(如从linux拷贝来的文件),windows上的fopen函数做了这样的格式转换。如果我记得没错的话,linux与vxworks上不会做这样的转换,所以可以说使用“w”,其属性要看所在的平台。
    “wb参数”表示为二进制文件,则样文件系统会按纯粹的二进制格式进行操作,因此也就不存在格式转换的问题了。
     综上,如果使用的是二进制文件,一定要使用“wb”参数,这样肯定错不了。
    
参数“wt”:
    “w”其实默认就是“wt”,即write in text mode。下面是msdn中队这几个参数的解释:

“If t or b is not given in mode, the default translation mode is defined by the global variable . ”

“The default setting of _fmode is _O_TEXT for text-mode translation. _O_BINARY is the setting for binary mode.

You can change the value of _fmode in either of two ways:

  • Link with BINMODE.OBJ. This changes the initial setting of _fmode to _O_BINARY, causing all files except stdin, stdout, and stderr to be opened in binary mode.
  • Change the value of _fmode directly by setting it in your program. ”
阅读(13058) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

fireaxe2011-08-12 20:27:47

jiayanfu: 好像“t”是表示文本文件吧,“b”表示2进制文件,“wb”表示该文件只写或者建立,“w”表示可写吧。。。。楼主鉴定一下!.....
wt与wb意义一样,都是只写,如果文件不存在则创建。w就是采用默认配置,vc中默认是wt。
以前只知道wb是写二进制文件,w是文本文件,但总觉得这与文本文件有什么区别,直到碰到这个问题才发现原来是不一样的。

jiayanfu2011-08-11 23:20:25

好像“t”是表示文本文件吧,“b”表示2进制文件,“wb”表示该文件只写或者建立,“w”表示可写吧。。。。楼主鉴定一下!

fireaxe2011-08-09 21:43:27

d19890104: 长见识了,多谢。不过标题是不是写错了?.....
嗯,疏忽了,应该是wb

95红旗2011-08-09 13:54:11

以前也在这个上面碰到过问题,后来在网上找了很多信息,也就解决了。

d198901042011-08-09 11:54:19

长见识了,多谢。不过标题是不是写错了?