快速访问 ifs() C++中的文件位置

Fast accessing file position in ifs() C++

本文关键字:文件 位置 C++ 访问 ifs      更新时间:2023-10-16

信息:在 txt 文件中存储位置、关闭文件,然后使用 c++ 在同一位置打开它的最佳方法是什么?

我有一个大文本文件,我需要分块解析并输入到某个系统中。截至目前,我将文件加载到 ifstream 中,然后获取行,直到找到我需要的数据(假设数据位于位置 {x}(。在此之后,我关闭文件,处理数据,现在我需要继续从大文件中馈送数据。所以我再次打开文件,并获取行,直到这次我到达位置 {x+d}(d 是我读取的数据的偏移量(......

而不是遍历文件一次,很容易看出,我去(1d + 2d + ... + (N-1(d + Nd( ~ d*N^2次文件。现在我想在d之后保存文件中的位置,关闭文件,然后立即打开相同位置的文件。什么可以用来做这个?

您无法在启用换行转换(标准称为"文本模式"(的情况下执行此操作,因为寻找回位置需要标准库扫描文件的整个前端以查找 N 个字符不重复计算换行符。 可变长度编码的转换(例如 UTF-8 和 UCS 之间的转换(会导致类似的问题。

解决方案是关闭换行转换(标准称为"二进制模式"(和任何其他涉及可变长度编码的转换,并自行处理这些转换。 关闭所有转换后,"文件位置"是操作系统直接用于执行文件 I/O 的数字,因此有可能非常高效(是否真正高效取决于标准库实现细节(。