加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:08:53 所属栏目:大数据 来源:网络整理
导读:我将参数值’* 1.dat’传递给FindFirst,仍然是FindFirst()例程返回的第一个文件是46checks5.dat,非常一致. 这是一个已知的问题吗? vpath:=trim(vpath);result:=true;try res:=findfirst(vpath+''+vmask,faarchive,search); //vmask = *1.dat try while res
我将参数值’* 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还会创建“short”名称,通常是以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:TEMP

2011.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.

为了解决这个问题,那么,而不是使用Delphi的包装器来FindFirstFile(),调用Win32 API FindFirstFileEx().将FindExInfoBasic传递给fInfoLevelId参数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读