保存结构体到文件

经常有这样一种需求,希望有些设置的信息(比如说账号信息)能够掉电后不丢失,重新开机后能够重新读出来。最简单的做法是把信息保存在文件中,文件在nand flash上就不会掉电丢失。

我们不仅可以向文件中写字符串,其实写结构体也是可以的。注意结构体里面不能有指针。

假设我们要保存一个账号结构体到文件,

#include <stdio.h>
#include <errno.h>
#include <string.h>
typedef struct _Account{
  char usrname[128];
  char passwd[128];
  int age;
  int level;
}Account;
void write_account2file(const char *path, Account *account)
{
  FILE *fp = NULL;
  fp = fopen(path, "w+");
  if (NULL == fp)
  {
    printf("open %s fail, errno: %d", path, errno);
    return;
  }
  fwrite(account, sizeof(Account), 1, fp);
  fclose(fp);
  return;
}

void read_accountFromFile(const char *path, Account *account)
{
  FILE *fp = fopen(path, "r");
  if (NULL == fp)
  {
    printf("open %s fail, errno: %d", path, errno);
    return;
  }
  fread(account, sizeof(Account), 1, fp);
  fclose(fp);
}

void main(void)
{
  #if 0
  Account account;
  strncpy(account.usrname, "fellow", strlen("fellow"));
  account.usrname[strlen("fellow")] = ‘\0‘;
  strncpy(account.passwd, "1111", strlen("1111"));
  account.passwd[strlen("1111")] = ‘\0‘;
  account.age = 18;
  account.level = 0;
  write_account2file("/mnt/hgfs/share/test/account.txt", &account);
  #endif
  Account read;
  read_accountFromFile("/mnt/hgfs/share/test/account.txt", &read);
  printf("read:%s,%s,%d,%d\n", read.usrname, read.passwd, read.age,read.level);

}

执行结果如下:

时间: 2024-10-05 04:43:08

保存结构体到文件的相关文章

几年前做家教写的C教程(之五专讲结构体与文件操作)

C语言学习宝典(5) 结构体: 将不同类型的数据组合成为一个有机的整体,这个整体就是一个结构体. 例如: Struct student { Int name; Char sex; Float score; }: 使用方法: 类型名 成员名: 一般形式: Struct { 成员列表: }变量名表列: 结构体变量的引用: 结构体变量名.成员名 文件: FILE  *fp; Fp=fopen(文件名,文件打开方式): Fclose(文件指针) 例1  对候选人得票的统计程序,设有3个后选人,每次输入一

Demo02_对结构体进行文件读写_张仕传_作业_

#include <iostream> using namespace std; #define StructArrarySize 5 // 老师数量 #define StudentNum 3 // 每位老师的学生的数量 #define FileName "f:/1.txt" // 文件路径和名称 #define LineMaxLen 1024 // 每行最大长读 #define KeyMaxLen 20 // key的最大长度 typedef struct _AdvTea

用结构体读取文件

#include<stdio.h>#include<stdlib.h>#include<string.h> int main(void){ struct data { char id[20]; char name[20]; char sex[10]; int old; char number[20]; char habit[10]; char b[10]; int piao; } student[10]; FILE *fp; if((fp=fopen("shi

cdev成员结构体file_operations文件操作结构的分析

struct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化为THIS_MODULES loff_t (*llseek) (struct file *, loff_t, int); // llseek用来修改文件当前的读写位置,返回新位置 // loff_t为一个”长偏移量”.当此函数指针为空,seek调用将会以不可预期的方式修改file结构中的位置计数器. ssize_t (*read) (st

保存结构体到本地(二进制)

#include <stdio.h>typedef struct student{float score1;float score2;float score3;float avr;}STUDENT;void save(STUDENT * student)//以二进制形式保存{ FILE *fp=NULL; fp=fopen("test.bin","wb"); if(fp==NULL) printf("文件为空"); if(fwrite

实验13——结构体、文件的基本应用

1. 本次课学习到的知识点: (1)结构类型是一种允许把一些数据分量聚合成一个整体的数据类型. (2)结构与数组的区别在于:数组中所有元素的数据类型必须是相同的,而结构中各成员的数据类型可以不同. (3) struct是定义结构类型的关键字,在struct之后,自行 命名一个结构名,它必须是一个合法的标识符. struct 结构名{ 类型名 结构成员名1; 类型名 结构成员名2; ··· 类姓名 结构成员名n; }; (4)在定义嵌套的结构类型时,必须定义成员的结构类型,再 定义主结构类型. (

C7_多结构体文件

.h // //  MyFunction.h //  C7_结构体多文件 // //  Created by dllo on 15/7/8. //  Copyright (c) 2015年 zhozhicheng. All rights reserved. // #import <Foundation/Foundation.h> // .h文件, 我们写函数的声明 // .m文件,写函数的定义 // 声明一个学生类型的结构体,用typedef设置 struct student{ int stu

梓益C语言学习笔记之结构体-共用体-枚举

有人说,我们需要将不同类型的数据组合成一个整体,于是,就有了结构体 一.结构体的概念: 一种或多种基本类型或构造类型的数据的集合. 二.定义方法: 先定义结构体类型,再去定义结构体变量 struct  结构体类型名{ 成员列表 }; 如: struct stu{ int num; char name[20]; char sex; }; struct stu  lucy,bob,lilei;//定义了三个struct stu类型的变量 每个变量都有三个成员,分别是num name  sex 通常咱

matlab结构体形式保存数据生成.mat文件&lt; 转&gt;

2015年 参加天池大数据竞赛 为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVXsjQvh8ARcx  访问密码 30a3 该工具包导入的数据格式就是我如下所说的封装方式,因此,在使用该算法包时,需要把自己的数据进行封装一下. 通过matlab打开,可以知道twonorm.mat里面还封装了两个.mat文件. 我们看看工具包的作者给的tutorial 部分源码如下: 的源码如下: 说明