C中按字节读文件读不出数据

lawen-y 2014-06-26 01:34:31
下面是一段 循环读取文件数据的代码,但是在循环里却一条数据都读不出来,放在外面可以读数据

FILE *fp,*fw;
int i = 0,j=0;
char id[32];
unsigned int pid;
short type;
long tm;
char ip[257];


fp=fopen("wtmpx","rb");
fw = fopen("my","wb");


if(fp==NULL || fw==NULL)
{
cout<<"打开文件失败"<<endl;
exit(-1);
}






while(1)
{
memset(id,0,sizeof(char)*32);


i=fread(id,32,1,fp);
if(i<=0)
{


break;
}
fseek(fp,36,SEEK_CUR);
memset(&pid,0,sizeof(unsigned int));
fread(&pid,4,1,fp);
memset(&type,0,sizeof(short));
fread(&type,2,1,fp);
fseek(fp,6,SEEK_CUR);
memset(&tm,0,sizeof(long));
fread(&tm,4,1,fp);
fseek(fp,30,SEEK_CUR);
memset(ip,0,sizeof(char)*257);
fread(ip,257,1,fp);


fseek(fp,1,SEEK_CUR);
printf("%s %d %d %ld %s\n",id,pid,type,tm,ip);


fprintf(fw,"%s %d %d %ld %s\n",id,pid,type,tm,ip);
}








cout<<"文件读取保存成功"<<endl;


fclose(fw);
fclose(fp);


一条数据372字节 跳跃性读数据

循环读数据一条都读不出来,但是吧while中的代码放在外面 就可以读数据
...全文
170 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lawen-y 2014-06-29
  • 打赏
  • 举报
回复
试一下去 用C++把这个解决了 谢谢
logiciel 2014-06-27
  • 打赏
  • 举报
回复
试改如下:
  FILE *fp,*fw; 
  int i = 0,j=0; 
  char id[32+1]; //改 char id[32];
  unsigned int pid; 
  short type; 
  long tm; 
  char ip[257+1]; //改 char ip[257];

  fp = fopen("wtmpx","rb"); 
  fw = fopen("my","wb"); 

  if (fp==NULL || fw==NULL) 
  { 
    cout<<"打开文件失败"<<endl; 
    exit(-1); 
  } 

  id[32] = 0; //加 字符串结尾
  ip[257] = 0; //加 字符串结尾
  while(1) 
  { 
    memset(id,0,sizeof(char)*32); 

    i=fread(id,32,1,fp); 
    if(i<=0) 
    { 
      break; 
    } 
    fseek(fp,36,SEEK_CUR); 
    memset(&pid,0,sizeof(unsigned int)); 
    fread(&pid,4,1,fp); 
    memset(&type,0,sizeof(short)); 
    fread(&type,2,1,fp); 
    fseek(fp,6,SEEK_CUR); 
    memset(&tm,0,sizeof(long)); 
    fread(&tm,4,1,fp); 
    fseek(fp,30,SEEK_CUR); 
    memset(ip,0,sizeof(char)*257); 
    fread(ip,257,1,fp); 


    fseek(fp,1,SEEK_CUR); 
    printf("%s %d %d %ld %s\n",id,pid,type,tm,ip); 


    fprintf(fw,"%s %d %d %ld %s\n",id,pid,type,tm,ip); 
    cout<<"文件读取保存成功"<<endl; 


    //移出循环 fclose(fw); 
    //移出循环 fclose(fp);
  }
  fclose(fw); 
  fclose(fp);
lawen-y 2014-06-26
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
[quote=引用 2 楼 peaktravel 的回复:] 为什么需要改SEEK_SET,SEEK_CUR就是当前位置,我没必要去增加偏移量吧?
你SEEK_CUR后调用ftell看看返回值指出你当前偏移量到底是多少。[/quote] 把那段代码放在while外面可以读欸 试试 谢谢
赵4老师 2014-06-26
  • 打赏
  • 举报
回复
引用 2 楼 peaktravel 的回复:
为什么需要改SEEK_SET,SEEK_CUR就是当前位置,我没必要去增加偏移量吧?
你SEEK_CUR后调用ftell看看返回值指出你当前偏移量到底是多少。
lawen-y 2014-06-26
  • 打赏
  • 举报
回复
为什么需要改SEEK_SET,SEEK_CUR就是当前位置,我没必要去增加偏移量吧?
赵4老师 2014-06-26
  • 打赏
  • 举报
回复
请将所有的SEEK_CUR改为SEEK_SET并相应修改偏移量的值。 判断每次调用fseek的返回值。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧