Mar*_*lot 5 delphi delphi-10.3-rio
我正在尝试使用 TDirectory.GetFiles 函数,但是当我添加 TSearchOptions 第三个参数以强制进行递归搜索时,编译器会引发错误,指出尚未声明 soAllDirectories。
uses System.IOutils,
System.Types;
procedure TfrmConversio.btnConversioClick(Sender: TObject);
var FilesPas: TStringDynArray;
begin
FilesPas := TDirectory.GetFiles('C:\Project', '*.pas', soAllDirectories);
ProgressBar1.Max := Length(FilesPas);
end;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么 ?。我可以在 System.IOUtils 中看到该常量。
谢谢你。
你需要写
TDirectory.GetFiles('C:\Project', '*.pas', TSearchOption.soAllDirectories);
Run Code Online (Sandbox Code Playgroud)
原因是编译器指令{$SCOPEDENUMS ON}是在TSearchOption类型定义之前找到的。这恰恰意味着您需要使用类型名称来限定枚举的常量。
从文档:
在$ SCOPEDENUMS指令启用或禁用在Delphi代码中使用范围的枚举。更具体地说,$SCOPEDENUMS 仅影响新枚举的定义,并且仅控制将枚举的值符号添加到全局范围。
在{$SCOPEDENUMS ON}状态下,枚举是有范围的,并且枚举值不会添加到全局范围中。要指定作用域枚举的成员,您必须包含枚举的类型。