打开文件
要以二进制的方式操作文件,需要首先以二进制的方式打开文件。以二进制方式打开文件只需要在打开方式中增加字符 b 即可。
例如:
FILE *fp = fopen(“a.dat”, “rb”);
以上代码中文件的打开方式为 rb ,字符 r 表示打开的文件用于读,字符 b 表示以二进制的方式打开。
读写文件
打开文件后依然是文件读写。二进制文件的可以使用 fread 和 fwrite 函数。
fwrite 函数
函数 fwrite 的原型为:
size_t fwrite(const void *buffer, size_t size, size_t count, FILE *stream);
size_t 为类型 long 的别名。函数 fwrite 实现把内存中从指定位置开始的指定个数的字节以二进制的方式写入文件。
第一个参数 buffer 指向内存中要写入文件的数据的首地址。
第二个参数 size 是要写入文件的数据对象的大小,一般使用运算符 sizeof 计算数据对象所占空间的字节数。
第三个参数是要写入的数据对象的个数。
第四个参数是文件指针,指向要写入数据的文件。函数 fwrite 可以一次将从 buffer 开始的,size*count 个字节的数据写入指针 stream 指向的文件中。
例如下面的程序可以将一个整数以二进制方式写入文件:
int n = 100;
FILE *fp = fopen(“a.dat”,“wb”); // 打开二进制文件 a.dat 用于写
fwrite(&n,sizeof(n),1,fp); // 将 n 以二进制形式写入文件
fread 函数
函数 fread 的原型为:
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
与 fwrite 相反,函数 fread 的作用是从文件的当前位置读取指定字节数的数据放入到内存的指定位置。
第一个参数 buffer 指向内存中要写入数据的位置。
函数 fread 的后 3 个参数与函数 fwrite 的后 3 个参数的意义相同,给出了要读取数据对象的字节数、数目及被读取的文件。
函数 fread 可以从指定文件的当前位置一次性读取 size*count 个字节的数据并存入 buffer 中。
例如下面的程序可以将文件 fp 中当前位置的整数以二进制方式读出到变量 n 中:
int n;
FILE *fp = fopen(“a.dat”,“wb”); // 打开二进制文件 a.dat 用于写
fread(&n,sizeof(n),1,fp);
此外,二进制文件的读写实际上是把数据原封不动的从文件搬到内存,或者从内存搬到文件。这里的原封不动是指数据的存储形式,即数据在内存中的0|1形式。
而文本文件的读写则不是,需要做一些转换。
例如把内存中的整数12以文本方式写入文件,12的存储格式为00000000 00000000 00000000 00001100,程序需要把这个数据转换成字符串"12"写入文件。
关闭文件
关闭文件函数和文本文件的关闭函数的使用事一样的,都是 fclose 函数。
int readClothing(FILE *fp, clothing cloth[])
{
int n;fread(&n,4,1,fp);
fread(cloth, sizeof(clothing), n,fp);
return n;
}