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

时间:2016-10-28 15:32:22

标签: delphi text delphi-xe large-data

我希望在我的应用中快速显示大文本文件的内容,而无需将整个文件加载到内存中。

其他人如何做到这一点?

  1. Total Commander是一个精彩工具,它有一个令人惊叹的内部查看器。它打开任何文件,无论多大,瞬间(或那么快,我无法计时)。我在12GB文件上试了一下。显示文件时没有明显的内存使用量(仅约100KB)。他们是怎么做到的?

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

  3. LargeTextFile
    近似滚动条的大小。滚动条连续调整(收缩),直到程序最终读取整个文件(可能需要几分钟)。与Total Commander相比,它真的很糟糕。

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

2 个答案:

答案 0 :(得分:7)

您只是以块的形式读取文件(例如,通过64KB或128KB的块),然后计算这些块中的行。不要尝试使用整个文档的行(如西尔维斯特所建议的那样),但是使用块和偏移量,然后欺骗用户界面来模仿你不知道这些行的事实。

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

它的缺点是更容易拥有最大行长度,即大块。 TotalCommander将包含很长的行,我想由于它的内部分块算法。

答案 1 :(得分:1)

用Delphi编写,源代码可用:

  

这是一个非常简单的工具,用于显示大文本文件   意味着它们不适合32位Windows进程的2 GB内存   可以使用。我成功测试了它显示的48 GB XML转储   英语维基百科,包含789.577.286行文字。

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

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