通常使用fprintf和fscanf进行对文件的格式化读写,但是因为读写的过程中要进行转码,因此
那么可以通过fread和fwrite进行对数据块的读写。
函数定义为
size_t fread(void *buffer,size_t numbyte,size_t count, FILE *fp); size_t fwrite(const void *buffer,size_t numbyte,size_t count, FILE *fp);
参数含义,buffer-数据块首地址,numbyte-单个数据块的大小,count-要写入的数据块个数,fp-要写入的文件
,对于读函数参数含义类似,就是buffer是存储读到的数据块的位置。
进行数据块的存储可以整体保存数组,结构体对象。
例如:
1 #include<stdio.h> 2 #include<malloc.h> 3 4 struct node 5 { 6 int x; 7 int y; 8 }; 9 10 int main(void) 11 { 12 struct node *b; 13 b=(struct node *)malloc(sizeof(struct node)); 14 15 (*b).x=20; 16 (*b).y=30; 17 18 printf("%d,%d\n",(*b).x,(*b).y); 19 20 FILE *fp; 21 22 fp=fopen("file.txt","w+"); 23 fwrite(b,sizeof(struct node),1,fp); 24 25 fclose(fp); 26 27 fp=fopen("file.txt","r+"); 28 struct node *c; 29 c=(struct node *)malloc(sizeof(struct node)); 30 fread(c,sizeof(struct node),1,fp); 31 32 fclose(fp); 33 printf("(%d,%d)\n",c->x,c->y); 34 return 0; 35 }
可以是用typedef定义结构体,
注意写入文件完毕之后必须保存,否则数据可能丢失。
字符串和数组整体写入和读取
1 #include<stdio.h> 2 #include<malloc.h> 3 4 int main(void) 5 { 6 char name[]="helloworld"; 7 printf("%s\n",name); 8 9 FILE *fp=fopen("file","w+"); 10 fwrite(name,sizeof(name),1,fp); 11 fclose(fp); 12 13 char *temp; 14 fp=fopen("file","r+"); 15 fread(temp,sizeof(name),1,fp); 16 fclose(fp); 17 18 printf("%s\n",temp); 19 return 0; 20 }
时间: 2024-11-20 08:53:04