2014-02-16 45 views
1

如何將特定文件夾和子文件夾中的文件只讀爲delphi? 我知道我可以把文件夾與FileSetAttr只讀,但有沒有辦法把文件夾和子文件夾?德爾福設置爲只讀取文件夾和子文件夾中的文件

感謝

+2

調用'FileSetAttr'功能爲每個文件夾中找到並其子文件夾。對於該搜索,使用FindFirst,FindNext。 – TLama

+1

@TLama:這屬於答案,而不是評論。 –

回答

5

你需要的所有文件遍歷目錄中,並遞歸在所有的子目錄。你可以使用這個功能來做到這一點:

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); 
+0

非常感謝 – user3297864

相關問題