14.8 把结构内容保存到文件中
由于结构可以存储不同类型的信息,所以它是构建数据库的重要工具。数据库文件可以任意数量的此类结构的数据对象。存储在一个结构中的整套信息被称为记录(record),单独的项被称为字段(field)。本节来谈论这个主题。
或许存储记录最没效率的方法使用fprintf()。例如,回忆程序清单14.1中的book结构:
#define MAXTITL 40
#define MAXAUTL 40
struct book {
char title[MAXTITL];
char author[MAXAULT];
float value;
};
如果pbook标识一个文件流,那么通过下面这条语句可以把信息存储于struct book类型的结构变量primer中:
fprintf( pbook, "%s %s %.2f\n", primer.title, primer.author, primer.value );
对于一些结构(如,有30个成员的结构)。这个方法用起来很不方便。另外,在检索时还存在问题,因为程序要知道一个字段结束和另一个字段开始的位置。虽然用固定字段宽度的格式可以解决这个问题(例如,"%39s%39s%8.2f"),但是这个方法仍然很笨拙。更好的方案是使用fread()和fwrite()函数读写结构大小的单元。这两个函数使用与程序相同的二进制表示法。例如:
fwrite( &primer, sizeof(struct book), 1, pbooks );
fread()函数从文件中拷贝一块结构大小的数据到&primer指向的位置。简而言之,这两个函数一次读写整个记录,而