C++->文件流的输入输出
1.书本里以“简单事务处理”为例子,解析二进制输入输出文件流的read和write函数的使用,以及输入输出文件流 过程中指针的捕获、定位,文件流位置的判断,二进制文件转换为文本文件。
1.1.二进制文件流的read函数的原型:read(char *buffer,streamsize size);
1.2.二进制文件流的write函数的原型:write(char *buffer,streamsize size); 注释:这里buffer是一块内存的地址,用来存储或读出数据。参数size是一个整数值,表示用从缓存(buffer)中读出或写入的字符数。
1.3.移动,获取指针位置函数
1.3.1.移动读、写指针位置
istream&/input.seekg(20,ios::beg); //以流开始位置为基准,后移20个字
istream&/input.seekg(-10,ios::cur); //以指针当前位置为基准,前移10个字
istream&/input.seekg(-10,ios::end); //以指针结尾位置为基准,前移10个字
ostream&/output.seekp()移动(写读)指针位置与seekg类似,
ostream&/output.seekp(120); //output流的写指针移到第120个(字节)处
input.tellg()返回读指针的当前位置值,要求返回值为long型
output.tellp()返回(写读)指针的当前位置值,要求返回值为long型
input.seekg(0,ios::beg); long posBeg=input.tellg(); //返回读指针的当前位置(文件开始位置)值
output.seekp(0,ios::end); long posEnd=output.tellp(); //返回写读指针的当前位置(文件末尾位置)值 在读文件流时既可以用“返回读指针当前位置值”函数,(也可以用“返回读写指针当前位置值”函数)来判断指针当前位置;
------------------------------------------------------------------------------------------------------------------------
1.4.C++判断指针当前位置需要三步,
第一步:把指针移到目标位置用istream/ostream &seekg/p(0/1/-1,ios::beg/cur/end)/seekg/p(long pos)函数,
第二步:用long pos=istream/ostream.tellg/p();获取指针当前位置值,
第三步:用判断语句对文件流移动指针位置值与获取目标指针位置值进行对比,得出运行结果。
1.5.与C语言的不同在于,C语言的位置变动只有rewind(fp1)函数、fseek(fp,100L,0/1/2)函数、ftell()函数, 只要指针移到对应的位置就可以对文件流进行读写,读和写指针不区分开来;
1.5.1.rewind(fp1):使位置指针重新返回文件的开头;
1.5.2.fseek()函数对文件流进行顺序和随机读写: fseek(文件类型指针,位移量,起始点), “起始点”用0、1或2代替,0代表“文件开始”-SEEK_SET,1为“当前位置”-SEEK_CUR,2为“文件末尾”-SEEK_END;位移量
的数据类型要求为long型,这样当文件的长度大于64K时不致于出问题。
1.5.3.ftell():得到流式文件中的当前位置,如果ftell()函数返回值为-1L,表示出错,long i=ftell(fp(文件类型指针));
1.5.4.C语言把文件指针用参数传递,C++把文件指针封装成对象,引用时用文件指针对象+点符号+函数名称进行使用。