Как я могу эффективно прочитать первые несколько строк из многих файлов в Delphi

У меня есть функция «Найти файлы» в моей программе, которая будет находить текстовые файлы с суффиксом .ged, которые читает моя программа. Я отображаю найденные результаты в окне, похожем на проводник, которое выглядит следующим образом:

enter image description here

Я использую стандартные методы FindFirst / FindNext, и они работают очень быстро. 584 файла, показанные выше, найдены и отображены в течение нескольких секунд.

Теперь я хотел бы добавить на дисплей два столбца, которые показывают «Источник» и «Версия», содержащиеся в каждом из них. файлы. Эта информация обычно находится в первых 10 строках каждого файла, в строках, которые выглядят так:

1 SOUR FTM
2 VERS Family Tree Maker (20.0.0.368)

Теперь у меня нет проблем с очень быстрым синтаксическим анализом, и я не об этом прошу.

В чем мне нужна помощь, так это просто в том, как наиболее быстро загрузить первые 10 или около того строк из этих файлов, чтобы я мог их проанализировать.

Я пытался выполнить StringList.LoadFromFile, но это занимает слишком много времени загрузка больших файлов, например, размером более 1 МБ.

Поскольку мне нужны только первые 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;
7
задан lkessler 1 February 2011 в 03:44
поделиться