Delphi diatur untuk hanya membaca file dari folder dan subfolder

Bagaimana saya bisa meletakkan file dari folder dan subfolder tertentu untuk hanya dibaca di delphi? Saya tahu bahwa saya dapat meletakkan folder dengan FileSetAttr menjadi hanya baca tetapi apakah ada cara untuk meletakkan file dari folder dan subfolder?

Terima kasih


person user3297864    schedule 16.02.2014    source sumber
comment
Panggil fungsi FileSetAttr untuk setiap file yang Anda temukan di folder dan subfoldernya. Untuk pencarian itu gunakan FindFirst, FindNext.   -  person TLama    schedule 17.02.2014
comment
@TLa: ini milik jawaban, bukan komentar.   -  person Remy Lebeau    schedule 17.02.2014


Jawaban (1)


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