fopen
文本文件与二进制文件区别
今天在写文件的时候发现fwrite的时候多出了一些乱码,最后发现加个b,以二进制的方式打开文件就解决了,google了....
特记与此
在学习C语言文件操作后,我们都会知道打开文件的函数是fopen,也知道它的第二个参数是标志字符串。其中,如果字符串中出现'b',则表明是以打开二进制(binary)文件,否则是打开文本文件。
那么什么是文本文件,什么是二进制文件呢?
可能大多数人都没有仔细考虑过。
在Windows和DOS系统中,狭义的文本文件是指扩展名为txt的文件。实际上,那些没有规定格式的,由可理解的的ASCII以及其他编码文字组成的文件都是文本文件,如C源程序文件,HTML超文本,XML。除此之外的其他文件都是二进制文件,如Word文件DOC,图象格式文件JPG。
但是,所谓使用fopen标志打开文本文件与二进制文件的说法并不准确。正确的说法应该是--以文本方式和二进制方式打开文件。因为我们用两种方式都可以打开任意的文件。
即使这样,为什么还要区分两种方式呢?
这是因为这两种方式在读写文件时的操作是不一样的。
二进制方式很简单,读文件时,会原封不动的读出文件的全部內容,写的時候,也是把內存缓冲区的內容原封不动的写到文件中。
而文本方式就不一样了,在读文件时,会将换行符号CRLF(0x0D 0x0A)全部转换成单个的0x0A,并且当遇到结束符CTRLZ(0x1A)时,就认为文件已经结束。相应的,写文件时,会将所有的0x0A换成0x0D0x0A。
所以,若使用文本方式打开二进制文件时,就很容易出现文件读不完整,或內容不对的错误。即使是用文本方式打开文本文件,也要谨慎使用,比如复制文件,就不应该使用文本方式。
要特別注意的是,上面这样的说法仅适用于DOS和Windows系统。在Unix和其他一些系统中,沒有文本方式和二进制方式的区分,使不使用'b'标志都是一样的。这是由于不同操作系统对文本文件换行符的定义,和C语言中换行符的定义有所不同而造成的。
如上文已提到,DOS和Windows系统使用CRLF(0x0D
0x0A)双字节作为文本文件换行符,而Unix文本文件的换行符只有一个字节LF(0x0A)为。在C语言中,也是以LF即'/n'为换行符。
由于DOS/Windows定义的换行符和C语言的不一致,C语言的标准输入输出函数进行读写文本文件时,就适行了CRLF->LF的转换。而Unix的定义和C语言的是一样的,就不必转换了。
那么,为什么會有定义不一致的情况呢,这纯属历史原因。当初C是在Unix上发展的,对换行的定义自然就一样了。其后C被引入到DOS系统,为了使原有的C程序能不加修改的读写DOS的文本文件,所以就在文件读写上做了修改。随着DOS/Windows成为主流平台,这个当初为了兼容而做的修改給众多的C语言开发者添了这样一个小小的麻烦。
文章来自:http://blog.chinaunix.net/space.php?uid=9950859&do=blog&cuid=2140344
分享到:
相关推荐
文本文件与二进制文件的详细解释 有需要的朋友可以下载。
文本文件和二进制文件读写区别,C语言
然后再将二进制文件还原并存入a3.txt文件。 具体代码如下: #include #include #include #define NSIZE 8 void print_2(int val2); /***********文本文件转二进制**********/ void Text2Bin(const char* sIn,...
文本文件转换二进制文件
二进制文件srcfile 转换成文本文件 targetfile,16进制显示。 二进制文件srcfile 转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件 targetfile,16进制显示。 二进制文件转换文本文件,16进制显示...
读取文件中的二进制文件并将二进制转换成文本文档并输出
一个很有用的工具,可以将二进制文件转换为文本文件
十六进制的文本文件,转为十六进制格式的二进制文件。 从第一个有效字符开始,每2个有效字符(即0~F)输出一个格式化字节,"0x"、"\r\n"、空格等字符会被跳过。
1:本程序读取二进制文件,并把读到的二进制文件保存为文本数据 2:二进制文件内容一系列的三维点云数据,由扫描仪器扫描获得 3:本程序采用了多线程技术,读取二进制文件时,界面不会卡顿 4:实例二进制文件为data....
依次读出文件中的字节,如果存在'/0'则是二进制文件, 否则为ASCII文本文件
在论坛想上传文件,不行! 直接粘贴文件内容,不行!可能它是二进制文件。 怎么办,用“二进制文件、文本文件转换工具” C#应用示例,含源码。
将内容为十六进制的文本文件转换成二进制内容的bin文件
主要介绍了C语言采用文本方式和二进制方式打开文件的区别分析,有助于读者更好的理解文本文件与二进制文件的原理,需要的朋友可以参考下
把纯文本文件转化成二进制文件存储到一个.c文件里 .c文件的数组里是二进制的内容
说明:一款使用Python编写的文本编辑器 支持编辑文本文件、二进制文件、改变字体大小。支持ansi、gbk和utf-8编码。编辑二进制文件时 文件内容以转义序列形式显示。编辑python代码文件时 也支持代码高亮显示 类似IDLE...
matlab读取comtrade文件支持文本与二进制
该函数实现文本文件和二进制文件读写的功能,可以读取二进制文件画波形。
我看了很多,只有这个一针见血,读后感就觉很清晰,不会更加迷惑
总结介绍了二进制文件与文本文件的区别于联系。