栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

linux c将数据结构整体写入文件并整体读取数据

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux c将数据结构整体写入文件并整体读取数据

当数据量过大的时候,存在内存中就不是一个合理的方式,就可以选取写入文件来进行保存,读取数据。

以下是一个demo,用来记录学习的。保存一下!

ps:附加fopen的参数

#include 
#include 
#include 
typedef struct
{
    char s[100];
    int h;
} st2;
typedef struct
{
    char c;
    char *str;
    char s[100];
    int h;
    st2 k;
} st;
//写文件函数,将上面结构写入文件
int write()
{
    FILE *fp;
    st sa, sb;
    char *str = "abcdefg";
    sa.c = 'K';
    sa.str = "abcdefg";
    strcpy(sa.s, str);
    strcpy(sa.k.s, "fff");
    sa.k.h = 20;
    sa.h = -3;

    fp = fopen("st.txt", "w+");
    if (!fp)
    {
        printf("errror!n");
        exit(-1);
    }
    printf("sa:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sa.c, sa.str, sa.s, sa.h, sa.k.s, sa.k.h);
   // printf("sizeof(sa)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sa), &sa.c, &sa.str, &sa.s, &sa.h);
    fwrite(&sa, sizeof(sa), 1, fp);
    strcpy(sa.s, "hhjjj44433");
    fwrite(&sa, sizeof(sa), 1, fp);//写两次,模拟写入多个结构体
    //rewind(fp);
    //fread(&sb, sizeof(sb), 1, fp);
    //printf("sa:c=%c,str=%s,s=%s,h= %dn", sa.c, sa.str, sa.s, sa.h);
    fclose(fp);

    return 0;
    
}
//主函数,在主函数调用写文件,并读取文件中数据并打印查看信息
int main(void)
{
    FILE *fp;
    st sb;
    write();
    fp=fopen("st.txt","r");
    if(!fp)
    {
        printf("errror!n");
        exit(-1);
    }
    fread(&sb,sizeof(sb),1,fp);
    printf("read file sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h);
    fread(&sb,sizeof(sb),1,fp);
    printf("read file2 sb:c=%c,str=%s,s=%s,h= %d, k.s= %s, k.h= %dn", sb.c, sb.str, sb.s, sb.h , sb.k.s, sb.k.h);
   // printf("sizeof(sb)=%d:&c=%x,&str=%x,&s=%x,&h=%xn", sizeof(sb), &sb.c, &sb.str, &sb.s, &sb.h);

    fclose(fp);

    return 0;
}

#if 0
输出结果:
sa:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20     //写文件处打印
read file sb:c=K,str=abcdefg,s=abcdefg,h= -3, k.s= fff, k.h= 20 //第一次读
read file2 sb:c=K,str=abcdefg,s=hhjjj44433,h= -3, k.s= fff, k.h= 20//第二次读

结论:
如果要用追加的方式写用”a+”方式打开文件;读取用“r”方式读取;ps:“a+”如果文件不存在会创建文件
#endif

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号