一 C语言对文件的操作通常分为两个对。
A:fwrite()和fread()
B:sscanf()和sprintf()
注意:这两对不能混在一起用,否则,会出错。
二 当我们向文件中写入或者读取文本文件的时候,最好是用sscanf()和sprintf()两个函数,因为它们能够有效的避免文本文件中出现的乱码的问题
A:读取文件中内容
while( fgets(buf,1024,fp) != NULL )//判断fp文件中的内容是否已经真的读完。注意:如果真的读完,它的返回值为1;否则,返回值为0 { p2 = (struct book *)malloc(sizeof(struct book)); sscanf(buf,"%s %s %s %s %d %s %f\n",p2->data.auth,p2->data.name,p2->data.birth,p2->data.num,&p2->data.page,p2->data.place,&p2->data.price); p2->next = NULL;//p2后面指置空 p1->next = p2;//将p2连接在p1的后面 p1 = p2;//将p2赋给p1 nCount ++; }
B:向文件中写入内容
while(p != NULL) //判断p是否为空,以便进行循环 { fprintf(fp,"%s %s %s %s %d %s %f\n",p->data.auth,p->data.name,p->data.num,p->data.birth,p->data.page,p->data.place,p->data.price); p = p->next; nCount++;//用于统计保存书籍记录的数目 }
三 当我们想文件中写入或者读取的是二进制文件的时候,一般最好用fread() 和fwrite(),因为这个时候文件里面放在也全部是乱码,具体的很多细节部分也不能理解的很清楚
A:读取文件中内容
while( feof(fp) == 0 )//判断fp文件中的内容是否已经真的读完。注意:如果真的读完,它的返回值为1;否则,返回值为0 { p2 = (struct book *)malloc(sizeof(struct book)); if(fread(p2,sizeof(struct book),1,fp) == 1)//把fp文件中的内容全部放在p2 { p2->next = NULL;//p2后面指置空 p1->next = p2;//将p2连接在p1的后面 p1 = p2;//将p2赋给p1 nCount ++; } }
while(p != NULL) //判断p是否为空,以便进行循环 { if(fwrite(p,sizeof(struct book),1,fp) == 1) //把p中的内容写到fp中 { p = p->next; //p向后移动一 nCount++;//用于统计保存书籍记录的数目 } else { flag=0; break; //如果fwrite(p,sizeof(struct book),1,fp)返回值不是一,提前跳出循环 } }