我一直在使用Delphi 2010中的TMask进行实验,除了一个情况外,它似乎都按预期工作:当掩码名称包含 [ 或 ] 时,掩码似乎总是返回 false。例如:
var
MaskObj : TMask;
begin
MaskObj:= TMask.Create('c:\[test]\*');
try
Result:= MaskObj.Matches('c:\[test]\text');
finally
FreeAndNil(MaskObj);
end;
end;
返回 false。...
是的,[ 和 ] 是文件名中合法的字符。那么如果我想排除例如 c:[test]* 中的所有文件,我该怎么做呢?我的唯一解决方案是在检测到 [ 时进行 StringReplace,但这对于大量文件来说会很慢:
if (pos('[', Mask)>0) then
begin
mask:= ReplaceString(Mask, '[','_', etc...
// and do the same for the file name---
end;
有其他的方法吗?
PathIsPrefix
API 函数。PathIsPrefix('C:\[test]\', 'C:\[test]\text')
。不需要掩码,因此也不需要转义。 - Rob Kennedy