关于C中文件搜索的简单问题

时间:2010-09-21 23:29:21

标签: c file-io file

假设我写了一个文件

Mesh: 1
    Vertices: 345
    Indices: 123
    V: 1,3,4 1,4,5 ..
Mesh: 2
    Vertices: 456
    Indices: 42
etc.

我如何在任何位置寻找?例如。我想去Vertices:Mesh 2或V:Mesh 3等。

这些事情的正确方法是什么?

4 个答案:

答案 0 :(得分:3)

您通常会使用二进制格式。一种方法是在文件中分配一定量的空间作为标题。在这里,您将网格数,顶点和索引计数以及偏移量放入顶点数据开始的文件中。您在加载文件时读取标题,然后寻找适当的位置来读取您想要的数据。

答案 1 :(得分:1)

在文本文件格式中没有有效的随机搜索方式。这是因为您无法在不读取之前的所有内容的情况下知道文件中的正确偏移量。处理这些的唯一方法是顺序 - 从开始到结束。

因此,将整个文件读取并解析为内存中的某些数据结构。然后根据需要使用此结构而不是文件。

如果文件太大而无法将所有内容保存在内存中(现在这是非常不可能的),请通读文件而不将所有内容存储在内存中 - 而只是将文件偏移存储到数组中每个Mesh的开头。然后你可以轻松找到合适的地方。

答案 2 :(得分:0)

打开文件进行读取,然后读取一行直到文件结束(EOF)到达。对于每个读取行,检查该行是否与您的查询匹配。如果匹配,报告并返回。否则,请转到下一行。

主要的认知工作是检查比赛。具有明确定义的格式和易于解析的行格式,使您的工作变得轻松。

答案 3 :(得分:0)

正如其他答案所指出的,C只能寻找文件中的字节偏移量。

但是,如果您的“网格”对象始终按数字顺序存储在文件中,那么您不必按顺序读取整个文件以找到您所追踪的网格。您可以改为对文件执行二进制搜索 - 每当您在文件中寻找某个位置时,请向前扫描以查找下一个Mesh

相关问题