C语言中,将多个结构体数据写到一个文件中,应该如何读取?

2024-11-29 05:51:47
推荐回答(3个)
回答1:

C语言把一个结构体数组写入文件分三步:
1、以二进制写方式(wb)打开文件
2、调用写入函数fwrite()将结构体数据写入文件
3、关闭文件指针

相应的,读文件也要与之匹配:
1、以二进制读方式(rb)打开文件
2、调用读文件函数fread()读取文件中的数据到结构体变量
3、关闭文件指针

参考代码如下:

#include
struct stu {
    char name[30];
    int age;
    double score;
};
int read_file();
int write_file();
int main()
{
    if ( write_file() < 0 ) //将结构体数据写入文件
        return -1;
    read_file(); //读文件,并显示数据
    return 0;
}
int write_file()
{
    FILE *fp=NULL;
    struct stu student={"zhang san", 18, 99.5};
    fp=fopen( "stu.dat", "wb" ); //b表示以二进制方式打开文件
    if( fp == NULL ) //打开文件失败,返回错误信息
    {
        printf("open file for write error\n");
        return -1;
    }
    fwrite( &student, sizeof(struct stu), 1, fp ); //向文件中写入数据
    fclose(fp);//关闭文件
    return 0;
}
int read_file()
{
    FILE *fp=NULL;
    struct stu student;
    fp=fopen( "stu.dat", "rb" );//b表示以二进制方式打开文件
    if( fp == NULL ) //打开文件失败,返回错误信息
    {
        printf("open file for read error\n");
        return -1;
    }
    fread( &student, sizeof(struct stu), 1, fp ); //读文件中数据到结构体
    printf("name=\"%s\" age=%d score=%.2lf\n", student.name, student.age, student.score ); //显示结构体中的数据
    fclose(fp);//关闭文件
    return 0;
}

回答2:

1。如果你知道存入文件的第一个结构是什么类型的,此种就非常方便了,自己根据 从文件读出的第一个结构里面的下个结构指针 来读文件中下个结构。
2。如果你不知道存入文件的第一个结构式啥类型,但又想分三个结构来存取,那你只能在每个结构里面加上一个变量来区分是什么结构,这样在读文件之前先读出这个变量,根据其值来判断结构类型

回答3:

不太方便,如果用vb.net的xml不容易出错,
你存结构体到文本,需要精确地定位,非常麻烦啊。