我的程序中有一個「查找文件」功能,它將查找帶有我的程序讀取的.ged後綴的文本文件。在我看起來像這樣的一個類似瀏覽器窗口中顯示的結果發現:如何在Delphi中高效地讀取多個文件的第一行文件
我用的是標準的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,所以這需要適用於任何編碼。
跟帖:感謝安東尼奧,
最後我做這個工作正常:
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;
TStrings.LoadFromFile效率很低,忘了它。認真思考一下,閱讀合理的(例如:NumLines * AvgLineLength)字節數,用LineStart截斷,然後分割成TStrings – 2011-01-31 06:23:35
實際上,蠕蟲並沒有你想象的那麼糟糕。它可以讀取和加載每秒大約10 MB。當我必須搜索這些文件中的文本時,我仍然可以成功使用它。但爲什麼使用它來加載整個文件,並且只需要頭幾行時就讓用戶等待40秒。 – lkessler 2011-02-01 03:36:53