从文件获取信息而不遍历其内容

时间:2012-02-04 12:56:47

标签: c++ file file-io filestream

This question让我在没有遍历其内容的情况下搜索文件中的其他内容(无需使用ifstream或getc等输入内容)。

除文件大小和字符数外,我还可以收集哪些其他信息?我搜索了fseek,发现我可以使用SEEK_SETSEEK_CURSEEK_END,这只允许我找到文件的结尾,文件的开头和当前指针

为了提出问题,我特别想问:

  1. 是否可以计算某些字符或字符类型(换行符等)的出现次数?
  2. 其内容可以与某个模板匹配吗?
  3. 使用这些方法比多次读取文件更快吗?
  4. 我问的是Microsoft Windows,而不是Linux。

3 个答案:

答案 0 :(得分:3)

  1. 没有
  2. 没有
  3. 取决于是否真的需要多次读取文件。
  4. 这里没有奇迹。前一个问题有一个“快捷方式”,因为文件中的字符数等于它的大小(以字节为单位)(更严格来说 - ansi-text文件被认为是一个字符序列,每个都由一个字节表示)。

答案 1 :(得分:3)

1),因为在不可预测的条件下搜索某些内容需要彻底检查内容。考试正在阅读中。当然,您之前可能会收集一些统计信息,但您需要遍历不少于一次的数据。您可以使用其他应用程序隐式执行此操作,但它们也将从最开始到最后遍历您的文件。您可以通过某种方式对文件进行组织,以便以最少的读取操作获取必要的信息,但这完全取决于您的任务,并且没有一般的方法(因为检查整个源结构的任何基本任务)。

2)同样(见上文)

3)。尽可能多地(或任务需要)存储在内存中(称为缓存)。例如,使用映射(请参阅MapViewOfFile for Windows和mmap(2)on * nix systems),这使用了一些系统内缓存机制。

答案 2 :(得分:2)

stat structure包含有关该文件的信息,包括权限,所有权,大小,访问权限和创建日期信息。至于元数据,也许有一个API可以绑定到Windows搜索数据库,可能允许搜索其他条件,例如内容属性(我通常是Linux人员,因此我不知道Windows在这方面提供了什么)。