二进制文件存取有关问题高分急需
二进制文件存取问题高分急需
这是结构体
------解决方案--------------------
你使用fseek( fp , 0L , 2 );把指针移动到文件尾求文件的大小,在读内容的时候得记得回复文件的指针到文件头啊。
- C/C++ code
void save(struct tell_list *head) //存 { struct tell_list *p; struct tell_list m; FILE * fp; fp = fopen( "people.dat" , "ab" ); if( fp == NULL ) { printf("文件打开失败。"); exit(0); } p = head ; while ( p != NULL ) { m = *p; m.next = NULL; fwrite( &m , sizeof(struct tell_list) , 1 , fp ); p = p -> next; } fclose(fp); } /******************************************************************************************************************************/ struct tell_list *read(void) //取 { struct tell_list *head,*p,*q; struct tell_list m; int size,i,j; FILE * fp; head = NULL; fp = fopen( "people.dat" , "rb" ); if( fp == NULL) { printf("文件打开失败。"); exit(0); } fseek( fp , 0L , 2 ); size = ftell(fp); j = sizeof(struct tell_list); for( i = 1 ; i <= size ;i += j ) { p = (struct tell_list *)malloc(sizeof(struct tell_list)); if( p == NULL) { printf("分配空间不足!"); exit(0); } fread( &m , sizeof(struct tell_list) , 1 , fp ); m.next = NULL; *p = m; p -> next =NULL; if( head == NULL ) head = p; else { q = head; while ( q -> next != NULL ) { q = q -> next; } q -> next = p; } } fclose(fp); return (head); }
这是结构体
- C/C++ code
struct tell_list { int id; char name[11]; char sex[5]; int age; char tell[20]; char address[60]; char mail[30]; char relative[20]; struct tell_list *next; };
------解决方案--------------------
你使用fseek( fp , 0L , 2 );把指针移动到文件尾求文件的大小,在读内容的时候得记得回复文件的指针到文件头啊。