Anda perlu mengulangi semua file dalam direktori, dan secara rekursif pada semua subdirektori. Anda dapat menggunakan fungsi ini untuk melakukan itu:
type
TFileEnumerationCallback = procedure(const Name: string);
procedure EnumerateFiles(const Name: string;
const Callback: TFileEnumerationCallback);
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
EnumerateFiles(Name + '\' + F.Name, Callback);
end;
end else begin
Callback(Name + '\' + F.Name);
end;
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
end;
Ini adalah rutinitas tujuan umum. Anda dapat menyediakan prosedur panggilan balik yang akan dipanggil dengan nama setiap file. Di dalam prosedur panggilan balik itu, lakukan apa pun yang Anda inginkan.
Prosedur panggilan balik Anda akan terlihat seperti ini:
procedure MakeReadOnly(const Name: string);
begin
FileSetAttr(Name, FileGetAttr(Name) or faReadOnly);
end;
Dan Anda akan menggabungkannya seperti ini:
EnumerateFiles('C:\MyDir', MakeReadOnly);
person
David Heffernan
schedule
16.02.2014
FileSetAttr
untuk setiap file yang Anda temukan di folder dan subfoldernya. Untuk pencarian itu gunakanFindFirst
,FindNext
. - person TLama   schedule 17.02.2014