02
17
C语言二进制文件读写(Binary I/O)实例
作者:独木舟 日期:2012-02-17
经常遇到这样的问题。由于二进制文件没有ASCII方式的直观性,所以读写时调试起来比较麻烦。用C语言读写文件的好处之一是比C++的I/O库快(如果做过ACM应该会有这样的体验),此外C语言读写只需要简单的几个库函数,如fopen(),fclose(),fwrite(),fread(),fsanf(),fprintf(),其中fsanf()和fprintf()用于ASCII文件的读写,fwrite()和fread()用于二进制文件的读写。以下是一个小小的实例总结:
typedef struct tagPoint
{
double x,y,z;
}Point;
设有结构体:Point plist[100];
文件:file.dat
file.dat中的数据和结构体数组plist中的数据组织方式一致。
现在我们的任务是:
1、将文件file.dat中的数据读到plist中
2、或者将plist中的数据写到文件file.dat中。
读:
FILE *fp = fopen("file.dat","r");
fread(plist,sizeof(Point),100,fp);
fread的返回值为实际读入的结构体Point的元素个数。
写:
FILE *fp = fopen("file.dat","w");
fwrite(plist,sizeof(Point),100,fp);
fread的返回值为实际写入的结构体Point的元素个数。
简单吧,fread和fwrite的参数完全一样。在实际进行文件读写之前,应该先弄清文件数据的数据结构,这样就可以根据数据结构来设计与文件数据一致的结构体,一次性读入或写入数据。而不需要每次从二进制文件中读写一小块儿数据,从而避免出错,同时也避免多次的循环读写,加快读写速度。
typedef struct tagPoint
{
double x,y,z;
}Point;
设有结构体:Point plist[100];
文件:file.dat
file.dat中的数据和结构体数组plist中的数据组织方式一致。
现在我们的任务是:
1、将文件file.dat中的数据读到plist中
2、或者将plist中的数据写到文件file.dat中。
读:
FILE *fp = fopen("file.dat","r");
fread(plist,sizeof(Point),100,fp);
fread的返回值为实际读入的结构体Point的元素个数。
写:
FILE *fp = fopen("file.dat","w");
fwrite(plist,sizeof(Point),100,fp);
fread的返回值为实际写入的结构体Point的元素个数。
简单吧,fread和fwrite的参数完全一样。在实际进行文件读写之前,应该先弄清文件数据的数据结构,这样就可以根据数据结构来设计与文件数据一致的结构体,一次性读入或写入数据。而不需要每次从二进制文件中读写一小块儿数据,从而避免出错,同时也避免多次的循环读写,加快读写速度。
评论: 1 | 引用: 0 | 查看次数: -
发表评论