二进制文件的读写以及相关心得.docx

上传人:wux****ua 文档编号:9396708 上传时间:2020-04-05 格式:DOCX 页数:5 大小:35.22KB
返回 下载 相关 举报
二进制文件的读写以及相关心得.docx_第1页
第1页 / 共5页
二进制文件的读写以及相关心得.docx_第2页
第2页 / 共5页
二进制文件的读写以及相关心得.docx_第3页
第3页 / 共5页
点击查看更多>>
资源描述
二进制文件读写分析有关TXT文件以及bin文件处理的测试代码int main() /fstream file(D:test.dat,ios_base:in|ios_base:out|ios_base:app); fstream file; file.open(D:test1.dat,ios_base:out); int temp10 = 0x11,0x13,0x14,0x1F,0x1D,0x11,0x11,0x12,0x11,0x11; int temp110; file.write(char *)temp,sizeof(temp); file.close(); file.open(D:test1.dat,ios_base:in); file.read(char *)temp,sizeof(temp); unsigned int i; coutsizeof(temp)endl; for(i = 0;i sizeof(temp)/sizeof(unsigned int);i+) temp1i = tempi; couttempiprojectId = U; test1-password = 0x12; for(int i = 0;i someThingsi = tempi; test1-sm = (unsigned long)0x41; test1- = M; file.write(char *)test1,sizeof(test); file.close(); test *test2 = (test *)malloc(sizeof(test); file.open(D:test1.dat,ios_base:in); file.seekg(0x28); file.read(char *)test2,sizeof(test); for(int i = 0;i 10;i +) coutsomeThingsiendl; file.close(); return 0;有关bin文件处理的测试笔记 我一直以为自己很熟悉如何使用C/C+中的二进制文件,可今天测试的时候突然发现程序生成的二进制文件和文本文件一样。比如:FILE* fp = fopen(binary,wb);/FILE* fp = fopen(character.txt,w);fprintf(fp,count is %d,250);上述代码一个使用的是text file mode,一个是binary file mode,但结果生成的二进制文件中保存的仍然是ASCII 码,直接用记事本就可以打开查看。要说区别,主要是换行符的区别,binary file 的换行符为,而text file 的换行符为,仅此而已,我就想怎么回事啊,我明明是用二进制模式打开的文件呀,怎么里面直接保存的还是ASCII 码?也就是说保存125 这个数字还是会占用3 个字节,而不是我想象中那样只占一个字节!后来我就换用C+,结果还是一样,代码如下:ofstream fs(binary,ios:binary);/ofstream fs(character.txt);int i = 32765;fsiendl;/fs.write(char*)&i,2);fs.close();无论以二进制文件模式打开还是以文本模式打开,文件中都是保存着文本!似乎C/C+中的binary 模式不起作用!?!后来查阅资料才知道:要想在C/C+中将数据以二进制形式文件输出,与你打开文件时的模式没有关系,关键是取决于你调用哪个函数往文件里写东西!只有使用fwrite 和fs.write()函数才能以二进制形式输出到文件中,调用puts、fprintf、等函数输出的都是ASCII 文本,尤其需要注意的是类似于上面代码段中那样,在C+中,即使你用fsiendl 语句来输出一个整数,输出到二进制文件中的仍然是文本格式!来读取以二进制文件格式存储的整数!(注:中午我试过了,不行!这再次证明只能读入文本格式的数字)今天终于弄明白怎样使用C+读写二进制文件了。要读取文件必须包含头文件,这里包含了C+读写文件的方法。可以使用fstream 类,这个类可以对文件进行读写操作。1、打开文件。打开文件可以有两种方式,第一种可以使用fstream 类的构造函数。fstream file(test.dat,ios_base:in|ios_base:out|ios_base:app);另外一种方法就是使用open 函数。fstream file;file.open(test.dat,ios_base:in|ios_base:out|ios_base:app);这样就可以打开一个可读写的文件了。如果文件不存在的话,就会创建一个新文件并且以读写方式打开。这里需要说明一点,如果文件不存在的话,open 函数中第二个参数必须包含ios_base:out|ios_base:app,2、写文件。先进性写文件的操作否则读一个空文件是没有意义的。既然是写二进制文件可以向文件中写入一个整形值。写二进制字符只能使用write 函数。但是write 函数的原形是write(const char * ch, int size)。第一个参数是char *类型,所以需要把将要写入文件的int 类型转换成char *类型。这里的转换困扰了我好几天,不过终于弄明白了。代码如下。int temp;file.write(char *)(&temp),sizeof(temp);3、读文件。可以写文件了,读文件就好办多了。读文件需要用到read 函数。其参数和write 大致相同,read(const char * ch, int size)。要把内容读到int 类型变量中同样涉及到一个类型转换的问题。和写文件一样。int readInt;file.read(char *)(&readInt),sizeof(readInt);这样文件中的int 值就读入到int 型变量readInt 中了。4、文件指针。在文件的读写过程中往往需要对文件进行选择性读取。所以需要进行文件指针的移动。这是需要用到seekg 和seekp 函数。在fstream 类中有两个文件指针,一个是读取文件的指针,一个是写文件的指针分别用tellg 和tellp 文件来取得指针的位置。同样seekg 和seekp 两个函数分别是对这两个指针进行移动的函数。这两个函数的参数都是一样的。先对几个枚举类型进行一下说明:ios_base:beg 文件开始位置ios_base:cur 文件当前位置ios_base:end 文件末尾位置下面以seekg 为例说明一下指针移动的方法:file.seekg(3) 指针移动到第三个字符的位置file.seekg(ios_base:beg) 指针移动到文件开头file.seekg(ios_base:end) 指针移动到文件末尾file.seekg(-3,ios_base:cur) 指针当前位置向前移动三个字符file.seekg(3,ios_base:cur) 指针当前位置向后移动三个字符file.seekg(3,file.tellg() 指针当前位置向后移动三个字符file.seekg(file.tellg()+3) 指针当前位置向后移动三个字符5、对文件操作完毕后别忘了关闭文件。file.close();以上5 个步骤就完成了对文件的读写操作。文本文件的操作是相同的,比二进制文件还要简单。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!