以什么模式打开文件根本不重要,只要关心这个文件里的数据内容本身是二进制格式还是文本格式就好了!如果内容是文本格式的,你就调用文本格式那一套函数,比如puts,gets,fscanf,fprintf,<<,>>等,如果内容是二进制格式的,你就调用二进制格式那一套函数,比如fread,fwrite,ifstream.read(),ofstream.write()等。 保持文件内容与处理函数相对应。
总结
文本方式和二进制方式打开文件本质上没有任何区别,唯一有区别的是对换行符的处理,文本文件中,换行符是以\r\n的形式存在的,而在c语言中换行符就是\n,所以说当你用文本方式打开文件时,它会进行一层转换:若你写的数据中包括换行符,那么它写入文件的是\r\n,相反,如果你读入的数据中有\r\n那么它会转换成\n,而如果以二进制方式打开则不会进行此类转换,除此之外文本方式和二进制方式打开文件没有任何区别,所以总的来说文本文件最好以文本方式打开,二进制文件最好以二进制方式打开。
如果非要作妖,用文本方式打开二进制文件,会出现什么情况?
其实也有可能正常,也可能不正常,如果你已文本方式打开二进制文件进行读写的话,前面说过文本方式打开会进行换行符的转换,所以说当你写入的数据中有\n时,它会将其转换到\r\n写入文件,这就会导致,我明明只想往二进制文件里存个\n,但你给我整进去个\r\n,当然也就无形的多了\r这么个无效数据,后果是不可想象的,但是你要以二进制方式打开二进制文件当然没问题啦,他不会进行换行符的转换,读的数据中若有\n它也只会将\n的ASCll码的二进制数存进文件,不会有\r的存在,所以说,只要你能确保读写数据中不存在\r\n,其实文本方式还是二进制方式打开文件是一样的
比如你以文本方式打开二进制文件往里面写了一个\n(此时二进制文件里为\r\n),然后你读的时候以二进制方式打开进行读,那就出错了,他不会将\r\n转为\n,假如\r发音“哈哈”,\n发音“嘿嘿”,你正常想要存进二进制文件中的是嘿嘿,然后此时由于二进制方式打开他不会进行转换,就读出了哈哈嘿嘿,当然不对啦,但是如果你还是以文本方式打开读,他依旧会将\r\n转为\n,这样也不会影响正确内容
最后记住
我们在对一个文件进行操作以前,首先,我们要清楚这个文件到底是文本文件还是二进制文件。文件文件用文本方式打开,二进制文件用二进制方式打开
如果我们要操作一个二进制文件,那么我们就以二进制方式打开(理论上也可以以文件方式打开,但是如果写的二进制数据里面有45时,会转化成45,42存储,见1.这是很有可能发生的)。同时读写的时候用fread,fwrite这两个函数。
如果我要操作一个文本文件,那么我们就以文本的方式打开(理论上也可以以二进制方式打开,但是不保险)。同时读写的时候用读写字符的那些函数fprintf,fscanf ,fgetc,fputc,putw,getw,fgetc,fputs