读书人

struct存取有关问题高手帮忙

发布时间: 2012-02-05 12:07:15 作者: rapoo

求助:struct存取问题,高手帮忙
怎么将结构体中的数据以二进制的形式保存到一个文件中,又如何将这个文件中的数据读入到结构体中,拜托!

[解决办法]
函数名: fwrite
功 能: 写内容到流中
用 法: int fwrite(void *ptr, int size, int nitems, FILE *stream);
程序例:

#include <stdio.h>

struct mystruct
{
int i;
char ch;
};

int main(void)
{
FILE *stream;
struct mystruct s;

if ((stream = fopen( "TEST.$$$ ", "wb ")) == NULL) /* open file TEST.$$$ */
{
fprintf(stderr, "Cannot open output file.\n ");
return 1;
}
s.i = 0;
s.ch = 'A ';
fwrite(&s, sizeof(s), 1, stream); /* write struct s to file */
fclose(stream); /* close file */
return 0;
}
[解决办法]
函数名: fread
功 能: 从一个流中读数据
用 法: int fread(void *ptr, int size, int nitems, FILE *stream);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
FILE *stream;
char msg[] = "this is a test ";
char buf[20];

if ((stream = fopen( "DUMMY.FIL ", "w+ "))
== NULL)
{
fprintf(stderr,
"Cannot open output file.\n ");
return 1;
}

/* write some data to the file */
fwrite(msg, strlen(msg)+1, 1, stream);

/* seek to the beginning of the file */
fseek(stream, SEEK_SET, 0);

/* read the data and display it */
fread(buf, strlen(msg)+1, 1, stream);
printf( "%s\n ", buf);

fclose(stream);
return 0;
}
[解决办法]
这样不行吗??

typedef struct block_s {
...
} Block_t;
Block_t data = {...}, block;

FILE *fp;
fp = fopen( "filepathname ",, "r+b ");

fwrite(&data,sizeof(Block_t), 1, fp);
fread(&block, sizeof(Block_t), 1, fp);
//或者
fwrite((void*)&data,sizeof(Block_t), 1, fp);
fread((void*)&block, sizeof(Block_t), 1, fp);


[解决办法]
//刚试了一下可以
#include "stdio.h "
typedef struct {float x;int y;char zz;}Name;

int main()
{ Name aa={1.234,34, 'a '};
Name bb;
FILE *fp;
if((fp=fopen( "data.txt ", "wb "))==NULL)
{printf( "can 't creat the file ");
return 1;
}
fwrite(&aa,sizeof(Name),1,fp);
fclose(fp);
if((fp=fopen( "data.txt ", "rb ")) ==NULL)
{printf( "can 't open the file ");
return 1;
}
fread(&bb,sizeof(Name),1,fp);//读二进制文件
printf( "%f\t%d\t%c\n ",bb.x,bb.y,bb.zz); //验证结果

return 0;
}

读书人网 >C++

热点推荐