好了,这是不是植酮,但德尔福(的标签已被移除?)
我不得不重新思考这一切,再一次。这一次我收获了。
我写了自己的rutine将文件加载到列表框中,并对其进行了冒泡排序。 之后,我可以提取未处理的文件名。
测试场景:4628个文件
测试分析是这样的:
加载文件列表分为: TFileListBox时间:2,24 TFileListBoxEx时间:1,52 TJvFileListBox时间:59,28(WTF Jvl的libralies有错吗?)
自己rutine有日期时间信息和冒泡排序到加载文件: 的TListBox时间:1,61
// Get files list
if FindFirst(C_MailIncomingDir+'\*.eml', faAnyFile, Rec) = 0 then
repeat
Setlength(FileList, Length(FileList) + 1);
Setlength(DateList, Length(DateList) + 1);
FileList[High(FileList)]:= Rec.Name;
DateList[High(DateList)]:= FileDateToDateTime(Rec.Time);
until FindNext(Rec) <> 0;
FindClose(Rec);
// Sort
// Bubble sort
repeat
Done:= True;
for i:= 0 to High(FileList) - 1 do
if DateList[i] > DateList[i + 1] then
begin
Done:= False;
TempName:= FileList[i];
FileList[i]:= FileList[i + 1];
FileList[i + 1]:= TempName;
TempDate:= DateList[i];
DateList[i]:= DateList[i + 1];
DateList[i + 1]:= TempDate;
end;
until Done;
// Show in list
FilesInDir.Clear;
for i:= 0 to High(FileList) do
FilesInDir.Items.Add(FileList[i] + ' ' + DateTimeToStr(DateList[i]));
通过由日期时间排序的文件,有可能diff的出尚未处理的所有文件用这一行(0,06而不是10秒为4500个文件):
for I := FileListHandled.Count to FilesInDir.Count-1 do
FilesNeedHandling.Items.Add(FilesInDir.Items[i]);
我有这个想法。 –
如果你运行这个,每小时说一次,你可以通过选项“-mmin -60”找到在最近60分钟内修改的所有文件。我认为这应该涵盖所有文件。 –
如果程序在一个周末崩溃,将会有一段时间的差距,并且还会有文件将被处理多次的风险(这就是为什么我将处理后的文件名保存到文本文件) –