Delphi ตั้งค่าให้อ่านเฉพาะไฟล์จากโฟลเดอร์และโฟลเดอร์ย่อย

ฉันจะวางไฟล์จากโฟลเดอร์และโฟลเดอร์ย่อยเฉพาะให้อ่านเฉพาะใน delphi ได้อย่างไร ฉันรู้ว่าฉันสามารถใส่โฟลเดอร์ที่มี FileSetAttr ให้อ่านอย่างเดียวได้ แต่มีวิธีใส่ไฟล์จากโฟลเดอร์และโฟลเดอร์ย่อยหรือไม่

ขอบคุณ


person user3297864    schedule 16.02.2014    source แหล่งที่มา
comment
เรียกใช้ฟังก์ชัน FileSetAttr สำหรับแต่ละไฟล์ที่คุณพบในโฟลเดอร์และโฟลเดอร์ย่อย สำหรับการค้นหานั้นให้ใช้ FindFirst, FindNext   -  person TLama    schedule 17.02.2014
comment
@TLama: นี่เป็นคำตอบไม่ใช่ความคิดเห็น   -  person Remy Lebeau    schedule 17.02.2014


คำตอบ (1)


คุณต้องวนซ้ำไฟล์ทั้งหมดในไดเรกทอรี และวนซ้ำในไดเรกทอรีย่อยทั้งหมด คุณสามารถใช้ฟังก์ชันนี้เพื่อทำสิ่งนั้น:

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;

นี่เป็นกิจวัตรวัตถุประสงค์ทั่วไป คุณสามารถระบุขั้นตอนการติดต่อกลับที่จะเรียกพร้อมกับชื่อของแต่ละไฟล์ ภายในกระบวนการโทรกลับนั้นทำสิ่งที่คุณต้องการ

ขั้นตอนการติดต่อกลับของคุณจะมีลักษณะดังนี้:

procedure MakeReadOnly(const Name: string);
begin
  FileSetAttr(Name, FileGetAttr(Name) or faReadOnly);
end;

และคุณจะรวมมันเข้าด้วยกันดังนี้:

EnumerateFiles('C:\MyDir', MakeReadOnly);
person David Heffernan    schedule 16.02.2014