Linux/C读文件的问题
来源: 互联网 发布时间:2017-01-05
本文导语: 下面的函数读文件,并且把读出的结果显示出来 int sread() { int pos=0; fseek(fp,pos,SEEK_SET); printf("IDtNAMEtSEXn"); while (!feof(fp)) { if (fread(&std,sizeof(struct student),1,fp)!=1) { perror("Read file failed"); break; } else { pri...
下面的函数读文件,并且把读出的结果显示出来
int sread()
{
int pos=0;
fseek(fp,pos,SEEK_SET);
printf("IDtNAMEtSEXn");
while (!feof(fp))
{
if (fread(&std,sizeof(struct student),1,fp)!=1)
{
perror("Read file failed");
break;
}
else
{
printf("%dt%st%sn",std.id,std.name,std.sex);
pos+=sizeof(struct student);
fseek(fp,pos,SEEK_SET);
}
}
return 0;
}
奇怪的是输出每一条记录以后,还会有下面一行
Read file failed:Success
为什么还会出现这一行呢?
int sread()
{
int pos=0;
fseek(fp,pos,SEEK_SET);
printf("IDtNAMEtSEXn");
while (!feof(fp))
{
if (fread(&std,sizeof(struct student),1,fp)!=1)
{
perror("Read file failed");
break;
}
else
{
printf("%dt%st%sn",std.id,std.name,std.sex);
pos+=sizeof(struct student);
fseek(fp,pos,SEEK_SET);
}
}
return 0;
}
奇怪的是输出每一条记录以后,还会有下面一行
Read file failed:Success
为什么还会出现这一行呢?
|
额,想错了。。。文本要这样读,二进制直接判断返回值和请求值是否相同,不相同就是文件这次读完了。
#include
#include
int main()
{
FILE *fp=fopen("d:\text.txt","wb+"); //create & trunc & write & read & binary
if(fp==NULL)
{
fprintf(stderr,"fopen errorn");
return -1;
}
/*
if(fwrite("1234",sizeof(char),4,fp)!=4)
{
fprintf(stderr,"fwrite errorn");
return -1;
}
*/
fseek(fp,0,SEEK_SET);
char buffer[100];
size_t nRet,nReq=sizeof(buffer)/sizeof(char);
while( nRet=fread(buffer,sizeof(char),nReq,fp) ) //!=0说明读到了数据
{
int nCnt=nRet/sizeof(char);
for(int i=0;i