怎样将内存中的结构体数组写入和读取文本文件(C)

sunwantc 2008-07-05 03:21:36
怎样将内存中的结构体数组写入和读取文本文件,
例如:

struct time
{
int num;
int year;
int month;
};

...全文
660 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
friendyhabc 2009-06-06
  • 打赏
  • 举报
回复
不行,这些全是二进制文件的,不是文本文件
warren258 2008-12-18
  • 打赏
  • 举报
回复
最近作业是学籍管理系统,学到了不少东西,谢了
zqh886 2008-07-10
  • 打赏
  • 举报
回复
刚好我做了,呵呵,给你参考参考:
//////////////////////////////////////////////////////// 读操作
time Nodeptr[20];
FILE *fp;
CString lpFileName="d:\\my.txt"; //文件路径
HANDLE hFile;
hFile=CreateFile(lpFileName,GENERIC_WRITE, //创建文件路径
FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,NULL);

if((fp=fopen("d:\\my.txt","wb"))!=NULL) //写文件操作
{
fwrite(Nodeptr,sizeof(Nodeptr),1,fp);
fclose(fp);
}
else
::AfxMessageBox("文件打开失败!");
//////////////////////////////////////////////// 写操作
FILE *fp;
if((fp=fopen("d:\\my.txt","rb"))==NULL) //打开文件
::AfxMessageBox("can not open the file!");
else
{
fread(&Nodeptr,sizeof(Nodeptr),1,fp);
fclose(fp);
}
我看你有戏 2008-07-07
  • 打赏
  • 举报
回复


#include "stdio.h"
#include <stdlib.h>
int average(char *pFilePath);
void main()
{
FILE *fp;
int nData[10];
for(int i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",nData+i);
}
fp = fopen("c:\\data.txt", "wb");//b表示以二进制的形式写入文件
if(fp!=NULL)
{
fwrite(nData,sizeof(int),10,fp);
fclose(fp);
//写完文件后,可以看一下文件大小,40个字节,
//其实就是数组的大小 sizeof(int)*10 = 40 以前在学校里没搞明白的问题,现在明白了
}

printf("平均值大小:%d\n",average("c:\\data.txt") );


system("pause");
}

int average(char *pFilePath)
{
int nData[10]={0};
FILE *fp;
fp = fopen(pFilePath, "rb");//b表示以二进制的形式
if(fp!=NULL)
{
fread(nData,sizeof(int),10,fp);
fclose(fp);
}
else
{
printf("读取文件出错了...");
return 0 ;
}

int nSum = 0 ;
for(int i=0;i<10;i++)
{
printf("第%d个数:\t内存地址%8x\t值:%d\n",i+1,nData+i,*(nData+i));
nSum += *(nData+i) ;
}
return nSum/10;
}
//数组其实和结构差不多的,改改就可以了,主要是要得到首地址,和所占内存的大小
//这个地址就好像是小时候放牛时候的那条链接牛鼻子的绳子,一拉就把牛牵走了
aozhi 2008-07-07
  • 打赏
  • 举报
回复
fread
fwrite
比较方便
ForestDB 2008-07-07
  • 打赏
  • 举报
回复
怎么读,怎么写。
怎么写,怎么读。

file相关的api看看先(fopen...)
sunwantc 2008-07-06
  • 打赏
  • 举报
回复
怎样在屏幕上输入目录再打开?
K行天下 2008-07-05
  • 打赏
  • 举报
回复

#include <stdio.h>

struct time
{
int num;
int year;
int month;
};

int main()
{
struct time t1={1,2008,8};
FILE *fp;

fp = fopen( "str.dat", "w" );

fwrite(&t1, 1, sizeof(t1), fp);//写入文件
rewind(fp);//定位到文件头,以便后面的读取正常!!

fwrite(&t1, 1, sizeof(t1), fp);//从文件读出啦
fclose( fp );
printf("%d,%d,%d",t1.num,t1.year,t1.month);

return 0;
}

060 2008-07-05
  • 打赏
  • 举报
回复
这样简单的结构体数组, 可以直接写入。

比如:
struct time t[3];

可以直接这样写
fwrite(t, 1, 3 * sizeof(time), fout);

可以把 t[3] 使用的内存数据, 直接写入到文件中. 读入也是差不多.

如果结构体中含有指针, 就要麻烦一点:
比如
struct Object
{
int id;
char* name;
};

Object o[3];
就要一个一个的写入:
fwrite(&(o[0].id), 1, 4, fout);

fwrite(o[0].name, 1, strlen(o[0].name) + 1, fout);

lijpbasin 2008-07-05
  • 打赏
  • 举报
回复
类似于这样吗?
#include <stdio.h>

struct time
{
int num;
int year;
int month;
};

int main()
{
struct time t1;
FILE *fp_in, *fp_out;

fp_in = fopen( "in.dat", "r" );
fp_out = fopen( "out.dat", "w" );

fscanf( fp_in, "%d%d%d", &( t1.num ),
&( t1.year ), &( t1.month ) );
fprintf( fp_out, "%d\n%d\n%d\n", t1.num,
t1.year, t1.month );

fclose( fp_in );
fclose( fp_out );

return 0;
}

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧