gpt4 book ai didi

delphi - 为什么 FindFirst 返回与掩码不匹配的文件名?

转载 作者:行者123 更新时间:2023-12-03 14:35:53 25 4
gpt4 key购买 nike

我将参数值'*1.dat'传递给FindFirst,FindFirst()例程返回的第一个文件仍然是46checks5.dat,非常一致。

这是一个已知问题吗?

vpath:=trim(vpath);
result:=true;
try
res:=findfirst(vpath+'\'+vmask,faarchive,search); //vmask = *1.dat
try
while res=0 do
begin
vlist.add(search.name); //searchname returned is 46checks5.dat!!!
res:=findnext(search);
end;
finally
findclose(search);
end;
except
result:=false;
end;

最佳答案

原因是该文件的名称“长”,即超过 8 个字符。对于此类文件,Windows 还会创建“短”名称,通常以 longna~1.dat 的形式创建,并且可以通过 *1.dat 通配符找到此短名称。

您可以在空目录中的命令提示符中轻松重现相同的行为:

C:\TEMP>echo. > 46checks5.dat C:\TEMP>dir /x *1.dat Volume in drive C has no label. Volume Serial Number is 5C09-D9DE Directory of C:\TEMP2011.04.15  21:37                 3 46CHEC~1.DAT 46checks5.dat               1 File(s)              3 bytes

FindFirstFile() 的文档,这是 FindFirst 状态的底层 API:

The search includes the long and short file names.

要解决此问题,请调用 Win32 API FindFirstFileEx(),而不是使用 Delphi 的包装器来 FindFirstFile()。 。通行证 FindExInfoBasicfInfoLevelId 参数。

关于delphi - 为什么 FindFirst 返回与掩码不匹配的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com