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

我想做一个程序,需要编写一些数据放在磁盘上供使用,怎样把这些数据存到磁盘上... 我想做一个程序,需要编写一些数据放在磁盘上供使用,怎样把这些数据存到磁盘上 展开
 我来答
刺友互
高粉答主

2019-06-26 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:72.5万
展开全部

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); }。

百度网友fc027fc
推荐于2016-01-31 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3160
采纳率:83%
帮助的人:783万
展开全部

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;
}

编译运行后的结果如下:

   

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
推荐于2018-02-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450131
专业C/C++软件开发

向TA提问 私信TA
展开全部

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

假定结构体格式为

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个字节。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-13
展开全部
使用文件操作函数
fread
fwrite
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-09-13
展开全部
数据块读写函数:fread、fwrite。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式