如何在delphi中将特定文件夹和子文件夹中的文件设置为只读?我知道我可以把带有FileSetAttr的文件夹设置为只读,但是有没有办法把文件夹和子文件夹中的文件放进去呢?
谢谢
发布于 2014-02-16 22:14:45
您需要遍历目录中的所有文件,并递归遍历所有子目录。您可以使用此函数来执行此操作:
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);
https://stackoverflow.com/questions/21816067
复制