在不遍历文件内容的情况下从文件中获取信息

Getting information from a file without traversing its contents

本文关键字:文件 获取 信息 情况下 遍历      更新时间:2023-10-16

这个问题让我在不遍历文件内容的情况下(意味着不使用ifstream或getc等输入内容)搜索还能从文件中获得什么。

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

为了让它成为一个问题,我特别想问:

  1. 某些字符或字符类型(换行符等)的出现次数是否可以计数
  2. 它的内容可以与某个模板匹配吗
  3. 使用这些方法是否比多次读取文件更快

我问的是微软的Windows,而不是Linux。

1),因为在不可预测的条件下搜索某物需要对内容进行彻底检查。考试就是读书。当然,您以前可能会收集一些统计数据,但您需要遍历数据至少一次。您可以使用其他应用程序隐式地执行此操作,但它们也会从头到尾遍历您的文件。你可以通过某种方式组织你的文件,以获得必要的信息,只需最少的读取操作,但这完全取决于你的任务,而且没有通用的方法(因为任何通用的方法都是用来检查整个源结构的)。

2) 也(见上文)

3) 。将尽可能多的(或任务所需的)存储在内存中(称为缓存)。例如,使用映射(请参见MapViewOfFile For Windows和*nix系统上的mmap(2)),这使用了一些系统内缓存机制。

  1. 这取决于是否确实需要多次读取该文件

这里没有奇迹。前一个问题有一个"快捷方式",因为文件中的字符数等于其字节大小(更严格地说,ansi文本文件被认为是一个字符序列,每个字符由一个字节表示)。

stat结构包含有关文件的信息,包括权限、所有权、大小、访问权限和创建日期信息。至于元数据,可能有一个API可以绑定到Windows搜索数据库中,该数据库可能允许根据其他标准进行搜索,如内容属性(我通常是Linux用户,所以我不知道Windows在这方面提供了什么)。