如何快速显示一个大(GB)的文本文件?

How to quickly display a large (GB) text file?

我想在我的应用程序中快速显示一个大文本文件的内容,而不是将整个文件加载到内存中。

其他人是怎么做的?

  1. Total Commander 是一个很棒的工具,它有一个很棒的内部查看器。它可以瞬间打开任何文件,无论文件有多大(或者速度快到我无法计时)。我在 12GB 文件上试过。显示文件时没有显着的内存使用量(仅约 100KB)。他们是怎么做到的?

  2. SynEdit - 程序冻结(分钟),因为它首先解析整个文件,然后显示文本。

  3. LargeTextFile
    近似于滚动条的大小。滚动条不断调整(缩小)直到程序最终读取整个文件(可能需要几分钟)。和总指挥官比起来真的很烂

  4. UltraEdit 32 - 程序冻结(我不得不杀死它,因为我没有耐心(或 ram)让它完成)

您只需按块读取文件(例如,按 64KB 或 128KB 的块),然后计算这些块中的行。不要尝试使用整个文档的行(如西尔维斯特建议的那样),而是使用块和偏移量,然后欺骗 UI 来模拟您不知道行的事实。

滚动条不会跟随行,而是跟随文件中的偏移量,然后是块内的。如果移动栏,您将猜测最近的行在块中开始和结束。

缺点是比较容易有最大行长,也就是chunk。 TotalCommander 将换行很长的行,我想这是由于其内部分块算法。

写于Delphi,源代码可用:

This is a very simple tool for displaying large text files where large means they don't fit into the 2 GB memory which a 32 bit Windows process can use. I successfully tested it displaying a 48 GB XML dump of the English language Wikipedia which contained 789.577.286 lines of text.

https://sourceforge.net/projects/dzlargetextview/

(是的,我知道,这是一个老问题,但一个例子可能仍然有用。)