C语言文件读写结构体里面的数据怎样存到磁盘文件上

我想做一个程序,需要编写一些数据放在磁盘上供使用,怎样把这些数据存到磁盘上

1、首先打开VC++6.0。

2、选择文件,新建。

3、选择C++ source file 新建一个空白文档。

4、首先声明头文件,#include<stdio.h>。

5、主函数,定义变量main( ){    FILE *fp;    int i; 需要一个结构体,struct rec{ /*定义结构体类型*/ char id[10];。

6、主要代码if( (fp=fopen("d:\\infile.txt","w"))==NULL ) /*以文本只写方式打开文件*/   {

printf("cannot open file"); exit(1); }。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-01-31

C语言,要将结构体中的数据存到磁盘上需要使用与文件操作相关的库函数。

首先要使用文件打开函数fopen()。

fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。

其次,使用文件读写函数读取文件。

在C语言中提供了多种文件读写的函数: 

·字符读写函数 :fgetc和fputc

·字符串读写函数:fgets和fputs

·数据块读写函数:freed和fwrite

·格式化读写函数:fscanf和fprinf

最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。


下面使用格式化读写函数fscanf和fprintf实现对文件A.txt(各项信息以空格分割)的读取,并存入结构体数组a中,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。


C语言源程序如下所示:

#include <stdio.h>
#include <stdlib.h>
#include  <assert.h>
typedef struct student{
        char name[32];
        int  no;
        char sex[16];
        float score;
} stu;
  
int main(int argc, char* argv[])
{
    //打开文件 
    FILE * r=fopen("A.txt","r");
    assert(r!=NULL);
    FILE * w=fopen("B.txt","w");
    assert(w!=NULL);
      
    //读写文件 
    stu a[128];
    int i=0;
    while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
    {
         printf("%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕 
         fprintf(w,"%s\t%d\t%s\t%g\n",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt 
         i++;
    }  
      
    //关闭文件 
    fclose(r);
    fclose(w);
      
    system("pause");
    return 0;
}

编译运行后的结果如下:

   

第2个回答  推荐于2018-02-27

结构体存储到磁盘文件,一般有两种方法,各有优劣,需要依照实际需求来选择。

假定结构体格式为

struct test
{
    int a;
    float b;
};

1 以二进制方式存储。

直接以二进制方式存储,参考代码如下:

#include <stdio.h>
int main()
{
    struct test v = {1, 2.3};
    FILE *fp;
    fp = fopen("save.bin", "wb"); //存储于save.bin中,注意要以二进制模式打开。
    if(fp == NULL)return -1; // 打开文件失败。
    fwrite(&v, sizeof(v), 1, fp); //写入文件。
    fclose(fp);//关闭文件。
    
    return 0;
}

当需要读取的时候,按照类似的流程,通过fread读取即可。

该操作优势为:

    a 代码简单。

    b 存储的数据文件大小固定,就是结构体占用内存空间的整数倍。这样在读的时候就可以根据文件的大小直接判断出一共存储了多少个数据。

缺点为:

    a 存储的是二进制方式,打开后不可读(大部分时候会是乱码)。

需要注意一点,当结构体中有指针类型时,所有指针不可以直接写入,而是要依照每个指针展开写入,即写入指针指向的地址内容,而不是写入指针本身的值。这种情况下,读取的时候也需要重新分配指针,并读取对应的数据。


2 以文本方式写入。

通过fprintf函数,对每个值以可读的方式,格式化输出到文本文件中。类似于printf的操作,只不过目标由标准输出转向文件。

参考代码如下:

#include <stdio.h>
int main()
{
    struct test v = {1, 2.3};
    FILE *fp;
    fp = fopen("save.txt", "w"); //存储于save.txt中,注意要以文本模式打开,也就是不带b的模式。
    if(fp == NULL)return -1; // 打开文件失败。
    fprintf(fp, "%d %f", v.a, v.b); //写入文件。
    fclose(fp);//关闭文件。
    
    return 0;
}

读取的时候用fscanf依次读取即可。

这种方法的好处是:

    a 获得的文件是可读的,打开后可以很清楚的看到每个结构体的值。比如例子中的文件最终存储的是

1 2.300000

缺点为:

    a 代码量偏大,如果结构体中有数量较多的元素,那么需要逐个写输出的格式和语句,可见工作量会相当大。

    b 存储的文件大小不确定,可能比二进制存储时大,也可能更小,不同结构体数值占用也不同。比如例子中的结构体,二进制存储的时候是8个字节,文本存储的时候是10个字节。而如果赋值v={-1234567,1234.1};那么文件中会存储

-1234567 1234.100000

这样文件就会占用20个字节。

本回答被网友采纳
第3个回答  2013-09-13
使用文件操作函数
fread
fwrite
第4个回答  2013-09-13
数据块读写函数:fread、fwrite。

C语言文件读写结构体里面的数据怎样存到磁盘文件上
struct test{ int a; float b;};1 以二进制方式存储。直接以二进制方式存储,参考代码如下:include <stdio.h>int main(){ struct test v = {1, 2.3}; FILE *fp; fp = fopen("save.bin", "wb"); \/\/存储于save.bin中,注意要以二进制模式打开。 if(fp == NULL...

c语言如何创建文件并将结构体数据存进去
c语言如何创建文件并将结构体数据存进去?需要使用文件操作函数fwrite和fread。 读物文件并写入结构体,同时保存文件的代码如下:1、写 FILE* fp = fopen("card.dat

c语言读取txt文档并将内容存放到表里
在C语言中,读文件的需要用到文件类型 FILE;通常的使用方式为: FILE *fp;定义一个文件指针;用指针打开文件的函数为:fp = fopen("mm.txt","w"));w可以是r,对应两种使用方式:w(write),r(read)如果是将信息写入文件,则是w。若是将文件信息写入程序,则是r。在r的方式时,即读文...

C语言,请问如何将结构体中的结构体拷贝到内存
1、可以直接用=符号拷贝,但它有一个条件,这里的赋初值不别的数据类型(如 int a;a=5;)它必须是对结构体中的每个成员以此赋值的。将一个结构体变量的值直接赋给另外一个结构体变量的时候,这两个结构体必须是相同结构体名。2、不同类型的话,也可以用,一般在做通信方面用的比较多。因为处理...

c语言中怎么把一个结构体数组写入文件
1、以二进制读方式(rb)打开文件 2、调用读文件函数fread()读取文件中的数据到结构体变量 3、关闭文件指针 参考代码如下:include<stdio.h>struct stu {char name[30];int age;double score;};int read_file();int write_file();int main(){if ( write_file() < 0 ) \/\/将结构体数据写入...

c语言怎么用文件保存和读取 结构体数组\/
NULL )return -1 ;fread( (char*)tr , sizeof(struct test), 3 , fp ); \/\/从文件中读三个结构体的数据,也可以一个一个的读 fclose(fp);\/\/输出读到的数据 { int i;for(i=0;i<3;i++ )printf("%d %s %lf\\n" , tr[i].a , tr[i].s, tr[i].d );} return 0;} ...

c语言如何将文件中的数据读出来并存到链表中
文件I\/O通过fgets来读入整行(也就是一个struct的数据)然后借助sscanf或者strtok来分离数据并分别存入结构体 链表本身操作不困难吧,先有一个链表头,然后通过malloc创建新的项 如果是一次性连续读入数据(比如数据库的初始化),用一个while循环来控制就好 ...

c语言 怎么把文件数据读取后原样输入
这个问题我已经给很多人都回答过了,sss[]结构体的数据类型并非都是一字节存储的,fwrite(,,1,)这个函数要让它以一字节写入显然是不对的啊。换用fprintf函数

...2.怎么将从键盘上输入的学生数据保存在磁盘文件中?
&stu[i].chinese,&stu[i].english,&stu[i].aver);}\/\/以下代码段是将输入的数据写入文件中FILE *fp;fp = fopen("d:\/test.txt","w");for(i=0;i<N;i++){fprintf(fp,"%d %s %d %d %d %d\\n",stu[i].num,stu[i].name,stu[i].math,stu[i].chinese,stu[i].english,stu[i]...

c语言读文本,文本是关于学生成绩的结构体,然后读入另一个文件并且按照总...
程序先由程序员编辑创建并保存在硬盘上,源程序在机器上表现为01组成的位序列,8个位一个字节,每个字节表示一个文本字符,它是以ascii码的形式表示的。只由ascii字符组成的文件叫做文本文件,所有其他的叫做二进制文件。为了让机器能够识别并运行程序,每条语句必须被转为低级机器语言指令,然后将指令按照可...

相似回答