您確實需要通過文件迭代整個驅動器設置屬性文件。您需要修改代碼以遞歸到子目錄中。顯然你實際上需要調用設置屬性的函數。
的基本方法是這樣的:
type
TFileAction = reference to procedure(const FileName: string);
procedure WalkDirectory(const Name: string; const Action: TFileAction);
var
F: TSearchRec;
begin
if FindFirst(Name + '\*', faAnyFile, F) = 0 then begin
try
repeat
if (F.Attr and faDirectory <> 0) then begin
if (F.Name <> '.') and (F.Name <> '..') then begin
WalkDirectory(Name + '\' + F.Name, Action);
end;
end else begin
Action(Name + '\' + F.Name);
end;
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
end;
我在一個通用的方法來讓你與不同的操作使用相同的行走編寫的代碼這一點。如果您要使用此代碼,則需要將屬性設置代碼合併到您作爲Action
傳遞的過程中。如果您不需要一般性,請刪除所有提及的TFileAction
,並將您的屬性設置代碼替換爲Action
。像這樣:
procedure WalkDirectory(const Name: string);
var
F: TSearchRec;
begin
if FindFirst(Name + '\*', faAnyFile, F) = 0 then begin
try
repeat
if (F.Attr and faDirectory <> 0) then begin
if (F.Name <> '.') and (F.Name <> '..') then begin
WalkDirectory(Name + '\' + F.Name);
end;
end else begin
DoSetAttributes(Name + '\' + F.Name);
end;
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
end;
當您試圖在整個捲上運行它時需要很長時間。您需要在僅包含少量文件和幾個子目錄級別的目錄上進行測試。
另外,準備好修改屬性以使某些文件失敗的代碼。例如,由於安全性原因,您不能期望執行音量範圍廣泛的操作,而不會遇到故障。使您的代碼在這種情況下健壯。
問題是...? –