У меня была почти та же проблема с программным обеспечением факс-сервера, которое я разработал. Мне пришлось отправлять факсы в порядке их получения от тысяч (все они хранятся в каталоге). Решение, которое я принял (которое медленно запускается, но быстро запускается), состоит в том, чтобы создать отсортированный список всех файлов, используя
SearchRec.Time
в качестве ключа. После того, как файл находится в списке, я устанавливаю атрибуты файла как faSysFile:
NewAttributes := Attributes or faSysFile;
Теперь, когда я делаю новый поиск с
FileAttrs := (faAnyFile and not faDirectory);
отображаются только файлы, не относящиеся к faSysFile, поэтому я могу добавить в список файлы, поступающие в новом.
Теперь у вас есть список всех файлов, отсортированных по времени.
Не забывайте, что при запуске приложения первым шагом является удаление атрибута faSysFile из файлов в папке, чтобы их можно было снова обработать.
procedure FileSetSysAttr(AFileName: string);
var
Attributes, NewAttributes: Word;
begin
Attributes := FileGetAttr(AFileName);
NewAttributes := Attributes or faSysFile;
FileSetAttr(AFileName, NewAttributes);
end;
procedure FileUnSetSysAttr(AFileName: string);
var
Attributes, NewAttributes: Word;
begin
Attributes := FileGetAttr(AFileName);
NewAttributes := Attributes and not faSysFile;
FileSetAttr(AFileName, NewAttributes);
end;
procedure PathUnSetSysAttr(APathName: string);
var
sr: TSearchRec;
FileAttrs: Integer;
begin
FileAttrs := (faAnyFile and not faDirectory) and (faAnyFile or faSysFile);
APathName := IncludeTrailingBackslash(APathName);
if SysUtils.FindFirst(APathName + '*.*', FileAttrs, sr) = 0 then
try
repeat
if (sr.Attr and faDirectory) = 0 then
FileUnSetSysAttr(APathName + sr.Name);
until SysUtils.FindNext(sr) <> 0;
finally
SysUtils.FindClose(sr);
end;
end;
Я знаю, что это не лучшее решение, но оно работает для меня.