C读写二进制文件

Tips for green man:

首先,对编程经验较浅薄的读者们重申一个观点: 计算机内部的一切数据流和信息流,都是二进制的。

我们不要纠结于“读二进制的文件”, 或者“写十六进制的文件“, 类似这样的问题。 因为文件本身的保存数据都是按二进制来写的,我们的着眼点应该是文件内的“内容”是什么。

比如说你在一个txt文件内,写入了一个“十进制的5”,你打开这个txt看到的就是一个十进制的5,这是因为你保存的内容是“十进制的5”;如果你保存的是“二进制的5”,那么你打开这个txt看到的将是类似“101”这样的一个二进制的数字,它转换为十进制的时候就是5啦。

因此文件保存起来的东西,只是一堆无意义的0和1,大家看到的可视化的结果,使我们人为赋予他们的“意义”。因此我们只需着眼于按什么方式读文件,这就是我们赋予数据“意义”的地方。

我们可以在很多文件内写东西、 读东西(例如txt、dat、bin、raw等等形式的文件都是可以操作的)。也就是说所谓的“二进制”文件应该是文件内容是二进制的,而不是说这个文件是用二进制保存的,因为即便是上面例子中说的“txt文件内写入一个十进制的5”,这个txt文件的保存也是以二进制的数据流保存下来的。

 

进入正题,我们现在开始总结C方式的二进制文件读写。

1、读二进制文件的数据内容时,用到文件头类型指针FILE*,三个步骤分别是:(1)的打开文件fopen_s函数;(2)读文件fread函数;(3) 关闭文件fclose函数;

2、写二进制文件的数据内容时,用到文件头类型指针FILE*,三个步骤分别是:(1)的打开文件fopen_s函数;(2)读文件fwrite函数;(3) 关闭文件fclose函数;

注意在使用fopen_s函数函数的时候,其二个形参代表打开文件的模式,“读/写”分别对应“r/w”,“b” 表示“二进制方法”;如下图程序中,“rb”和“wb”分别表示“以二进制方式读/写文件”。

// input binary data
FILE *fprb;
if ( fopen_s(&fprb, fname, "rb") != 0 )  //> fname is path of file by const char* type
{
	printf("can't open file\n");
	return false;
}
fread(&Con, sizeof(Con), 1, fprb);  //> Con is a container to contain the input data
fclose(fprb);


// output binary data
FILE *fprb;
if ( fopen_s(&fprb, fname, "wb") != 0 )  //> fname is path of file by const char* type
{
	printf("can't open file\n");
	return false;
}
fwrite(&Con, sizeof(Con), 1, fprb);  //> Con is a container to contain the input data
fclose(fprb);

 

你可能感兴趣的:(C/C++)