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

dyllove98 阅读:192 2025-06-02 22:19:02 评论:0

例如,在打开文件并将记录读入数组之前,如何更好地判断二进制文件中有多少条记录?

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? */ 

请您参考如下方法:

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

顺便说一句,您读取记录的循环有一个问题——事实上,几乎所有类似while (!feof(file)) 的循环,或任何类似的循环实际上都保证无法正常工作(通常它会“读取”最后一条记录两次)。


标签:编程语言
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号