我希望在我的应用中快速显示大文本文件的内容,而无需将整个文件加载到内存中。
其他人如何做到这一点?
Total Commander是一个精彩工具,它有一个令人惊叹的内部查看器。它打开任何文件,无论多大,瞬间(或那么快,我无法计时)。我在12GB文件上试了一下。显示文件时没有明显的内存使用量(仅约100KB)。他们是怎么做到的?
SynEdit - 程序冻结(分钟),因为它将首先解析整个文件,然后它将显示文本。
LargeTextFile
近似滚动条的大小。滚动条连续调整(收缩),直到程序最终读取整个文件(可能需要几分钟)。与Total Commander相比,它真的很糟糕。
UltraEdit 32 - 程序冻结(我不得不杀死它,因为我没有耐心(或ram)让它完成)
答案 0 :(得分:7)
您只是以块的形式读取文件(例如,通过64KB或128KB的块),然后计算这些块中的行。不要尝试使用整个文档的行(如西尔维斯特所建议的那样),但是使用块和偏移量,然后欺骗用户界面来模仿你不知道这些行的事实。
滚动条不会跟随行,而是文件中的偏移量,然后是块内。如果移动条形,您将猜测最接近的线条在块中开始和结束。
它的缺点是更容易拥有最大行长度,即大块。 TotalCommander将包含很长的行,我想由于它的内部分块算法。
答案 1 :(得分:1)
用Delphi编写,源代码可用:
这是一个非常简单的工具,用于显示大文本文件 意味着它们不适合32位Windows进程的2 GB内存 可以使用。我成功测试了它显示的48 GB XML转储 英语维基百科,包含789.577.286行文字。
https://sourceforge.net/projects/dzlargetextview/
(是的,我知道,这是一个老问题,但一个例子可能仍然有用。)