读书人

关于文件流操作中的打开形式有关问题.

发布时间: 2013-07-08 14:13:00 作者: rapoo

关于文件流操作中的打开形式问题...求科普...谢谢了
程序是想要用二进制的形式打开一个文本文件...可是没有达到预想的效果...求大家指导指导....以下是程序:
#include<iostream>
#include<fstream>
using namespace std;
//===============================
void main()
{
ofstream out("文件流操作3.txt",ios::binary);
for(int i=10;i>0;i--)
out << i <<" " ;
out.close();
out<<endl;
}



文本结果:
10 9 8 7 6 5 4 3 2 1 iOS iostream 命名空间 二进制
[解决办法]
二进制文件和文本文件本质上只是差换行符的理解不同而已,关键在于程序员对数据的解析。<<是会以ASCII码的方式去解析,如果你想保存的是1/2/3等真实数据的话,用out.write这样的方式。
[解决办法]
为什么不用read呢
[解决办法]
摒弃fstream,使用FILE *

推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

[解决办法]
文本文件本身跟二进制文件一样,都是由0/1位组成,只是一般所说的文本文件每8位(一字节)必须是可显示的ASCII码范围(0~127),而二进制每8位任意(0~255)。

写文件有文本格式和二进制格式之分,ios::binary就是二进制, 它与文本格式的差别在于,文本格式会增加一些格式上的信息,比如换行'\n'用文本输出是两个字节0x0Ah [10],0x0Dh [13]. 而如用二进制输出则是0x0Ah [10].

而读文件时最大的区别:文本方式在遇到第一个EOF字符(ASCII:26)时就结束,二进制方式直到文件结尾。
[解决办法]
文件都一样,文本打开和二进制开发,只是程序看到的方式不同

读书人网 >C++

热点推荐