Delphi设置为只读取文件夹和子文件夹中的文件

时间:2014-02-16 20:23:39

标签: delphi delphi-7

如何将特定文件夹和子文件夹中的文件只能在delphi中读取? 我知道我可以将FileSetAttr的文件夹设置为只读,但有没有办法从文件夹和子文件夹中放入文件?

由于

1 个答案:

答案 0 :(得分: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);