二进制文件以基本类型数据在内存的二进制表示形式存放数据,不对写入或读出进行格式转换。
二进制文件的读写方式由程序控制。
打开二进制文件用binary方式。
二进制文件是随机存储的。
随机访问流:
流的状态表示:流的内容,长度和操作位置。
istream类操作流读指针的成员函数:
istream & istream :: seekg(long pos);
作用 读指针从流的起始位置向后移动由pos指定字节。
istream & istream :: seekg(long off, ios::seek_dir);
作用 读指针从流seek_dir的位置移动off指定字节。
ios::seek_dir值: | |
cur | 相对于当前读指针所指定的当前位置 |
beg | 相对于流的开始位置 |
end | 相对于流的结尾处 |
enum ios::seek_dir{beg = 0;cur = 1;end = 2}; |
istream & istream :: tellg();
作用 返回读指针当前位置值。
例子:
istream input ;
……
input . seekg ( - 10 , ios :: cur ) ;
//读指针位置以当前位置为基准,向前移动10个字节。
input . seekg ( 10 , ios :: cur ) ;
//读指针位置以当前位置为基准,向后移动10个字节。
input . seekg ( -10 , ios :: beg ) ;
//读指针从流开始位置向后移动10个字节。
input . seekg ( 10 , ios :: end) ;
//读指针位置以流尾为基准,向前移动10个字节。
ostream 类操作流泻指针的成员函数。
ostream & ostream :: seekp(long pos); |
作用 写指针从流起始位置向后移动指定pos字节 |
ostream & ostream :: seekp(long off , ios::seek_dir); |
作用 写指针从流的seek_dir位置移动off个字节 |
ostream & ostream :;tellp(); |
作用 返回当前写指针所在的位置值。 |
适合二进制操作的成员函数:
istream类中三个操作字节数据的成员函数
istream & istream :: get(char &c);
作用 从流中提取一个字节数据,更新对象c。
int istream :: get();
作用 函数值返回流中一个字节。
Istream & istream :: read(char *buf,int n);
作用 从流中提取n个字节数据,更新对象buf。
ostream 类中两个操作字节数据成员函数
ostream & ostream ::put(char c);
作用 向流插入一个字节数据.
ostream & ostream :: write(char *buf,int n);
作用 向流中插入对象buf,由第二个参数指定数目字节数据。
例:#include <iostream> #include <fstream> using namespace std;
void main()
{
char chararr[30],inchar[30];
cout << "请输入" << endl;
cin >> chararr;
//写
ofstream out("data.dat", ios::out|ios::binary);
out.write(chararr, 30);
out.close();
//读
ifstream in("data.dat", ios::in | ios::binary);
in.read(inchar, 30);
cout << "从二进制文件读取出来的:" << inchar << endl;
in.close();
}
运行结果: