繁体   English   中英

从二进制文件写入和读取整数数组

[英]writing and reading an array of integers from a binary file

嗨,我正在尝试从文件写入和读取整数数组,但是,我用来读回它们的循环处于无限循环中。 我将如何修复此无限循环,以便在到达文件末尾时退出循环。 另外,我也不完全确定fread是否在按我的预期做。

 FILE *fptr = fopen("number.db", "wb");
 int nums[100] = {1,2,3,4,5,6,7,8,9,100,101,102,103,104,105};
 int nums2[100];

 fwrite(nums,sizeof(int),15,fptr);
 fclose(fptr);

 fptr = fopen("number.db", "rb");
  fseek(fptr,0,SEEK_END);
  long end = ftell(fptr); //finds length of the file
  fseek(fptr,0,SEEK_SET);

 while(!feof(fptr)){
   int counter = 0;
   fread(nums2,sizeof(int),1,fptr);
   fseek(fptr,counter,SEEK_SET);
   counter++;
   if(counter>=end){ //Breaks when it seeks to the end
      break;
    }
 fclose(fptr);

我觉得这有些令人恐惧的逻辑,但是我不太确定。 当我打印出保存在“ nums2”中的数字时,它只会读取最后一个数字:nums2的所有元素均为105。

问题在于查找/计数器初始化的组合。

如果您每次将计数器都设置为0(第一条记录),然后又要寻找它,则文件记录中始终处于“有效范围”内。 文件条件结束将永远不会发生,因此,while外观将进入无限循环

我确实相信if条件“ if(counter> = end)”也是无用的,因此我将其删除。 一旦eof完成while循环,就应该这样。

 FILE *fptr = fopen("number.db", "wb");
 int nums[100] = {1,2,3,4,5,6,7,8,9,100,101,102,103,104,105};
 int nums2[100];

 fwrite(nums,sizeof(int),15,fptr);
 fclose(fptr);

 fptr = fopen("number.db", "rb");
 fseek(fptr,0,SEEK_END);
 long end = ftell(fptr); //finds length of the file
 fseek(fptr,0,SEEK_SET);
 int counter = 0;
 while(!feof(fptr)){
      fread(nums2,sizeof(int),1,fptr);
      fseek(fptr,counter,SEEK_SET);
      counter++;
      if(counter>=end){ //Breaks when it seeks to the end
           break;
      }
 }
 fclose(fptr);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM