-1

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

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

很容易看出,我不是通过文件一次,而是通过文件 (1d + 2d + ... + (N-1)d + Nd) ~ d*N^2 次。现在我想在d之后保存文件中的位置,关闭文件,然后在同一位置立即打开文件。可以为此使用什么?

4

1 回答 1

3

您不能在启用换行符翻译的情况下执行此操作(标准称为“文本模式”),因为回溯到该位置需要标准库扫描文件的整个前面以找到 N 个字符 - 不重复计数-换行符。可变长度编码的翻译(例如在 UTF-8 和 UCS 之间)会导致类似的问题。

解决方案是关闭换行翻译(标准称为“二进制模式”)和任何其他涉及可变长度编码的翻译,并自己处理这些。在关闭所有翻译的情况下,“文件位置”是操作系统直接用于执行文件 I/O 的数字,因此具有非常高效的潜力(实际上是否有效取决于标准库的实现细节)。

于 2018-07-04T15:50:09.230 回答