在不遍历文件内容的情况下从文件中获取信息
Getting information from a file without traversing its contents
这个问题让我在不遍历文件内容的情况下(意味着不使用ifstream或getc等输入内容)搜索还能从文件中获得什么。
除了文件大小和字符数之外,我还可以收集哪些信息?我搜索了fseek
,发现我可以使用SEEK_SET
、SEEK_CUR
和SEEK_END
,它们只允许我找到文件的结尾、文件的开头和当前指针。
为了让它成为一个问题,我特别想问:
- 某些字符或字符类型(换行符等)的出现次数是否可以计数
- 它的内容可以与某个模板匹配吗
- 使用这些方法是否比多次读取文件更快
我问的是微软的Windows,而不是Linux。
1)否,因为在不可预测的条件下搜索某物需要对内容进行彻底检查。考试就是读书。当然,您以前可能会收集一些统计数据,但您需要遍历数据至少一次。您可以使用其他应用程序隐式地执行此操作,但它们也会从头到尾遍历您的文件。你可以通过某种方式组织你的文件,以获得必要的信息,只需最少的读取操作,但这完全取决于你的任务,而且没有通用的方法(因为任何通用的方法都是用来检查整个源结构的)。
2) 也否(见上文)
3) 是。将尽可能多的(或任务所需的)存储在内存中(称为缓存)。例如,使用映射(请参见MapViewOfFile For Windows和*nix系统上的mmap(2)),这使用了一些系统内缓存机制。
- 否
- 否
- 这取决于是否确实需要多次读取该文件
这里没有奇迹。前一个问题有一个"快捷方式",因为文件中的字符数等于其字节大小(更严格地说,ansi文本文件被认为是一个字符序列,每个字符由一个字节表示)。
stat
结构包含有关文件的信息,包括权限、所有权、大小、访问权限和创建日期信息。至于元数据,可能有一个API可以绑定到Windows搜索数据库中,该数据库可能允许根据其他标准进行搜索,如内容属性(我通常是Linux用户,所以我不知道Windows在这方面提供了什么)。
- C++ - 忽略并从其他文件获取数据
- 为什么从文件获取图标时应用程序有时会崩溃?
- 如何在 c++ 窗口中将参数和返回的退出值传递到批处理文件/从批处理文件获取返回的退出值
- Qt .pro 文件获取 Qtkit 名称
- 提升属性树:如何使用xml文件获取子树的子级
- 从C 中的二进制文件获取整数值时
- 如何在Windows上绕过主机文件获取真实的IP地址
- 如何使用 CPP/C# 从 VHDX 文件获取文件(或文件系统)
- 从读取到对象指针数组的文件获取段错误
- 是否可以从IOS项目中的cpp文件获取文件路径
- 将数据从头文件获取到源文件中的非成员函数中
- 从两个不同的文件获取输入时,输入会发生变化
- 从文件 C++ 获取整数
- 通过在 C++ 中使用发布模式二进制文件获取崩溃原因
- C++ 将值从文件获取到数组中
- 使用HTTP上载文件.获取错误:-HttpSendReuest 12005
- 正在从外部文件获取输入
- 读/写同一个文件(获取gmon.out)
- 从二进制文件获取输入时发生访问冲突错误
- 从特定文件获取函数指针