有的时候存放在文件中的内容是固定的数据结构,这样通过fwrite和fread进行读写会更加方便。
fwrite可以将数据结构写入文件
size_t fwrite (const void *buffer, size_t size, size_t num, FILE *stream)
参数说明:
buffer:包含数据的数据单元地址
size:每个数据单元所占的字节数
num:需要写入的数据单元的个数
stream:目的文件指针
返回值:
实际写入目的文件的数据结构单元个数
fread可以从文件中读取数据结构
size_t fread( void *buffer, size_t size, size_t count, FILE *stream)
参数说明:
buffer:读取文件后,将数据写入的数据结构地址
size:数据结构所占字节数
count:要读取的数据结构单元的最大数量
stream:目的文件指针
返回值:
函数读取的完整项数,返回值可能小于 count(发生错误时,或者在到达 count之前遇到文件的末尾)
#include <stdio.h>
#include <string.h>//将要读写的数据结构
struct Data{char a[20];char b[20];int c;
};void write_to_file()
{FILE *fp = fopen("./test.txt", "w");if(fp){struct Data data1 = {"hello1", "world1", 188};fwrite(&data1, sizeof(data1), 1, fp); //写入数据结构struct Data data2 = {"hello2", "world2", 288};\fwrite(&data2, sizeof(data2), 1, fp); //写入数据结构fclose(fp);}
}void read_from_file()
{FILE *fp = fopen("./test.txt", "r");if(fp){struct Data data[5];int ret = 0;int i = 0;while(i < 5){//读取数据结构ret = fread(data + i, sizeof(struct Data), 1, fp);if( ret > 0){//读取到内容++i;}else{//到达文件尾break;}}fclose(fp);for(int j = 0; j < i; j++){printf("read:%s %s %d\n", data[j].a, data[j].b, data[j].c);}}
}int main ()
{write_to_file();read_from_file();return 0;
}
运行程序输出:
read:hello1 world1 188
read:hello2 world2 288
可以看到数据被正确的读取出来。