我正在尝试使用目录中的所有文件夹名称填充字符串列表。
以下是我如何做到这一点的摘录:
var
SL: TStringList;
SearchAttr: LongInt;
SR: TSearchRec;
begin
SL := TStringList.Create;
try
SearchAttr := (faDirectory);
if FindFirst(Directory + '\*.', SearchAttr, SR) = 0 then
begin
try
repeat
if (SR.Attr and faDirectory) <> 0 then
begin
if (SR.Name <> '.') and (SR.Name <> '..') then
begin
SL.Add(Directory + SR.Name);
end;
end;
until
FindNext(Sr) <> 0;
finally
FindClose(SR);
end;
end;
end;
// do something with string list folder names
finally
SL.Free;
end;
end;
我访问的父文件夹包含 220 个子文件夹,但例程仅添加 216 个文件夹名称。经过一番比较和调试,我发现有4个未添加的文件夹名称中包含点。
为了测试,我创建了一个名为“测试文件夹”的文件夹,并在其中添加了 9 个新文件夹,名为:
- Folder 1
- Folder 2
- Folder 3
- Folder 4
- Folder 5
- Folder .6
- Folder 7
- F.O.L.D.E.R 8
- Folder 9
使用“测试文件夹”作为父目录时,仅添加以下子文件夹:
- Folder 1
- Folder 2
- Folder 3
- Folder 4
- Folder 5
- Folder 7
- Folder 9
我一直在尝试SR.Name <> '.'
, SR.Name <> '..'
和SR.Name[1] <> '.'
等等没有成功。
如何修改代码以允许文件夹名称中包含点并将它们添加到我的字符串列表中?
谢谢
最佳答案
将搜索字符串从 '*.'
更改为 '*'
您的搜索字符串仅匹配扩展名为空的对象。您想要匹配所有对象,无论它们是否具有扩展名。
关于delphi - 如何获取名称中也包含点的目录的子文件夹名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38161435/