从C中的文件中读取值

时间:2014-10-17 03:36:16

标签: c binaryfiles fseek

我希望比较二进制文件中特定位置的值(例如,索引n x i的值,其中i = 0,1,2,3 ...并且n =任意数字,比如说10)。 我想看看这个值是否等于另一个,比如“m”。该值在文件中的位置始终仅为n x i。

我可以想到三种方法:

  1. 我维护一个临时变量,它存储n x i的值,我直接使用fseek转到该索引并查看它是否等于m。

  2. 我对文件中的m值进行了fseek。

  3. 我使用fseek搜索位置0,n,2n,3n,...等中m的值。

  4. 我不知道这些操作中的每一项是如何运作的,但其中哪一项在空间和时间方面最有效?

    编辑: 这个过程是一个更大的过程的一部分,它有更多的文件,因此时间很重要。 如果除了使用fseek之外还有其他方式,请告诉我们。

    任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:4)

如果您没有预先了解所搜索文件中的值和排序,最快捷的方法就是线性查看文件并比较值。

这可能最好通过重复使用fseek(),但重复调用fseek和read可能比只读取文件的大块并在内存中查看它们要慢 - 因为系统调用有很多开销。

但是,如果您正在对相同的文件进行大量搜索,那么最好建立索引和/或对记录进行排序。一种方法是将数据放入具有内置索引的关系数据库(几乎任何SQL数据库)

编辑:

由于您知道文件已排序,因此您可以使用binary search