read() 从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入
num 个字符时就到了文件尾,可以用成员函数 int gcount(); 来取得实际读取
的字符数;而 write() 从 buf 指向的缓存写 num 个字符到文件中,值得注意
的是缓存的类型是 unsigned char * ,有时可能需要类型转换。
例:
unsigned char str1[]=" I Love You" ;
int n[5];
ifstream in(" xxx.xxx" );
ofstream out(" yyy.yyy" );
out.write(str1,strlen(str1)); // 把字符串 str1 全部写到 yyy.yyy
中
in.read((unsigned char*)n,sizeof(n)); // 从 xxx.xxx 中读取指定个
整数,注意类型转换
in.close(); out.close();
四、检测 EOF
成员函数 eof() 用来检测是否到达文件尾,如果到达文件尾返回非 0 值,否
则返回 0。原型是 int eof();
例: if(in.eof()) ShowMessage(" 已经到达文件尾! " );
五、文件定位
和 C的文件操作方式不同的是, C++ I/O 系统管理两个与一个文件相联系的
指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下
次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以, C++的
文件定位分为读位置和写位置的定位,对应的成员函数是 seekg() 和 seekp() 。
seekg() 是设置读位置, seekp 是设置写位置。它们最通用的形式如下:
istream &seekg(streamoff offset,seek_dir origin);
ostream & seekp(streamoff offset,seek_dir origin);
streamoff 定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大
值, seek_dir 表示移动的基准位置,是一个有以下值的枚举:
ios::beg : 文件开头
ios::cur : 文件当前位置
ios::end : 文件结尾
这两个函数一般用于二进制文件, 因为文本文件会因为系统对字符的解释而
可能与预想的值不同。例:
file1.seekg(1234,ios::cur); // 把文件的读指针从当前位置向后移
1234 个字节