文件流操作二进制文件的读写
写二进制文件
以文件流的方式操作文件一样可以支持二进制方式的块读写。
例如:
ofstream cl(“c.dat”, ios::binary);
int n = 10;
cl.write((char*)&t,sizeof(t));
第一行程序申明了 ofstream 的对象 cl,并以二进制方式( ios::binary )打开文件c.dat(如果文件c.dat不存在,会先创建)用于输出( fstream 的对象的对象都是用于文件输出)。
第三行则将整数 t 以块写入的方式写入文件c.dat。函数 write 的第一个参数是要写入文件的数据首地址,必须是char*类型,要写入的数据是 t,所以该实参为&t,并进行了类型转换。第二个参数是要写入文件的字节数,t 整型变量,所占字节数可以用sizeof(t)求得。
读二进制文件
二进制的块读出方式和块写入方式类似。
例如下面的程序可以将写到文件c.dat中的整数读出:
ifstream fl(“c.dat”, ios::binary);
int n;
fl.read((char*)&n,sizeof(n));
第一行程序申明 ifstream 的对象 fl ,并以二进制方式打开文件c.dat用于读。
第三行从文件中读出一个整数。read 函数的第一个参数是读出的数据要放到内存中的位置,类型为char*。读出的整数要赋值给 n,所以该实参为&n,并进行了类型转换。第二个参数是读出的字节数,一个整数的字节数可以用sizeof(n)求得。
int getNumber(ifstream &ifile, char *label)
{
struct clothing t;
while(ifile.read((char *)&t, sizeof(struct clothing)))
{
if(string(t.label) == label)return t.numberRemaining;
}
return 0;
}