二进制文件读写

  • 格式:doc
  • 大小:199.50 KB
  • 文档页数:11

下载文档原格式

  / 25
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

今天终于弄明白怎样使用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();

C++文件流:

fstream// 文件流

ifstream// 输入文件流

ofstream// 输出文件流

//创建一个文本文件并写入信息

//同向屏幕上输出信息一样将信息输出至文件

#include

#include

void main()

{

ofstream f1("d:\\me.txt");//打开文件用于写,若文件不存在就创建它

if(!f1)return;//打开文件失败则结束运行

f1<

f1<

f1.close();//关闭文件

}

运行后打开文件d:\me.txt,其内容如下:

姓名:廉东方

家庭地址:河南郑州

文件操作:

打开文件

文件名

注意路径名中的斜杠要双写,如:

"D:\\MyFiles\\ReadMe.txt"

文件打开方式选项:

ios::in= 0x01,//供读,文件不存在则创建(ifstream默认的打开方式)

ios::out= 0x02,//供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式)

ios::ate= 0x04,//文件打开时,指针在文件最后。可改变指针的位置,常和in、out联合使用

ios::app= 0x08,//供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后

ios::trunc= 0x10,//在读写前先将文件长度截断为0(默认)

ios::nocreate= 0x20,//文件不存在时产生错误,常和in或app联合使用

ios::noreplace = 0x40,//文件存在时产生错误,常和out联合使用

ios::binary= 0x80//二进制格式文件

文件保护方式选择项:

filebuf::openprot;//默认的兼容共享方式