我在開發的傳真服務器軟件上遇到了幾乎相同的問題。我必須按照從成千上萬的收到的順序發送傳真(全部存儲在目錄中)。我採取的解決方案(這是緩慢的開始,但運行速度快)是使用
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;
我知道這不是最好的解決方案,但適用於我。
你可以添加一些東西到過程中,以便找到文件不涉及迭代磁盤上的文件?另外,你是在機器上運行程序還是通過網絡運行?如果是後者,我建議你嘗試在機器上運行程序,這樣文件夾迭代不會在網絡上運行。 –
我不知道如何將它變成答案,但是如果您可以在遠程計算機上安裝軟件,我想知道是否可以使用Power Shell版本2中的遠程功能。可以在遠程計算機上運行Power Shell腳本以查找最舊的文件,並且您將在本地獲取文件信息。我不確定你會如何得到答案,但我相信這是可能的。 –