如何在Delphi中有效地读取许多文件的第一行
我的程序中有一个“查找文件”功能,可以找到我的程序读取的带有.ged后缀的文本文件。我在类似于资源管理器的窗口中显示找到的结果,如下所示:
我使用标准的FindFirst / FindNext方法,这非常有效。上面显示的584个文件可在几秒钟内找到并显示。
我现在要做的是在显示屏上添加两列,显示每个文件中包含的“Source”和“Version”。此信息通常位于每个文件的前10行内,如下所示:
1 SOUR FTM
2 VERS Family Tree Maker (20.0.0.368)
现在我自己解析这个问题没有问题,这不是我要问的问题。
我需要帮助的只是如何最快速地从这些文件加载前10行,以便我可以解析它们。
我试图做一个StringList.LoadFromFile,但加载大文件需要花费太多时间,例如1 MB以上的文件。
由于我只需要前10行左右,我最好如何获得它们?
我正在使用Delphi 2009,我的输入文件可能是也可能不是Unicode,所以这需要适用于任何编码。
跟进:谢谢Antonio,
我最终做了这个工作正常:
var
CurFileStream: TStream;
Buffer: TBytes;
Value: string;
Encoding: TEncoding;
try
CurFileStream := TFileStream.Create(folder + FileName, fmOpenRead);
SetLength(Buffer, 256);
CurFileStream.Read(Buffer[0], 256);
TEncoding.GetBufferEncoding(Buffer, Encoding);
Value := Encoding.GetString(Buffer);
...
(parse through Value to get what I want)
...
finally
CurFileStream.Free;
end;
没有找到相关结果
已邀请:
5 个回复
提孺局缎
芦歉竭皑
淑灯
从任何
对象中读取单独的行,例如
。对于更快的文件I / O,您可以使用带有
的内存映射视图。
蓟类
如果有人对我以前在这里所拥有的东西感兴趣,那么就会遇到不使用unicode文件的问题。
箩冀娥
在像你这样的情况下仍然可以正常工作。 下面的代码将信息(文件名,来源和版本)加载到
中,以便您可以轻松查找,或者您可以在虚拟模式下使用listview,并在
甚至触发时查看此列表中的内容。 警告:以下代码不适用于unicode。