如何在用C编程语言读入数组之前嗅探二进制文件中的记录数?

Chr*_*_45 2 c binaryfiles file filesize

在打开文件并将记录读入数组之前,如何以更好的方式告诉二进制文件中有多少条记录?

MyFile = fopen("DATA.dat", "rb");
i = 0;
while (feof(MyFile) == 0) {
   fread(&tempReadingRecord,sizeof(tempReadingRecord), 1, file);
     if (feof(MyFile) == 0 {
     i++;
     }
   }
 fclose(MyFile);
}
printf("%d", i); /* does work to find out how many records but optimal? */
Run Code Online (Sandbox Code Playgroud)

Jer*_*fin 6

鉴于您显然正在处理整个固定大小的记录文件,您可以搜索文件的末尾,获取当前位置,然后除以记录大小.从理论上讲,这有一个可移植性问题(二进制文件可以在其末尾附加任意数量的NUL)但实际上你不会在大多数常见系统上遇到问题(AFAIK,主要发生在CP/M上,没有明确存储文件长度,只是一些块,所以文件的末尾总是填充以填充最后一个块).

顺便说一句,你读取记录的循环有一个问题 - 事实上,几乎任何类型的循环while (!feof(file))或任何类似的东西几乎可以保证不正常工作(通常它会"读取"最后一条记录两次).