delphi - Delphi设置为仅读取文件夹和子文件夹中的文件

标签 delphi delphi-7

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

谢谢

最佳答案

您需要遍历目录中的所有文件,并递归遍历所有子目录。您可以使用此功能来做到这一点:

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

关于delphi - Delphi设置为仅读取文件夹和子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21816067/

相关文章:

delphi - 向我的 Delphi 应用程序添加热键

delphi - 博主通过 idHTTP : error 400 bad request

delphi - 在 WebBrowser 控件上禁用 Ctrl+P(打印)

delphi - Delphi 7 中缺少运算符或分号

delphi - 如何检查控件何时完全初始化?

Delphi XE3 EXE 文件大小比 Delphi 7 大 25 倍

windows - Delphi XE 和使用 OnKeyDown 捕获箭头键

android - 如何在Delphi中调用Android上蓝牙设置的原生窗口?

delphi - 有没有办法从声明的例程*外部*更改本地类型常量?

windows - delphi中的多种形式