Delphi 为什么FindFirstFile/FindNext文件没有列出Windows 7上系统目录的全部内容?

Delphi 为什么FindFirstFile/FindNext文件没有列出Windows 7上系统目录的全部内容?,delphi,winapi,windows-7,delphi-xe3,Delphi,Winapi,Windows 7,Delphi Xe3,我有个小问题。APIFindNextFile未列出目录C:\Windows\System32(仅限Windows 7)的全部内容。有人有办法吗 代码[Delphi]: Var sAtr: String; sPathName: String; I: Integer; iCont: Integer; tHnd: THandle; tArrAtr: TStringList; tWDF: WIN32_FI

我有个小问题。API
FindNextFile
未列出目录
C:\Windows\System32
(仅限Windows 7)的全部内容。有人有办法吗

代码[Delphi]:

Var
  sAtr:       String;
  sPathName:  String;
  I:          Integer;
  iCont:      Integer;
  tHnd:       THandle;
  tArrAtr:    TStringList;
  tWDF:       WIN32_FIND_DATA;
Begin
  iCont := 0;
  sAtr := '';
  Result := TStringList.Create;
  tArrAtr := TStringList.Create;
  tHnd := FindFirstFile(PChar(sPath + '*.*'), tWDF);

  If RightStr(sPath, 1) <> '\' Then
    sPath := sPath + '\';

  If tHnd = INVALID_HANDLE_VALUE Then
    Exit;

  Repeat
    If (tWDF.dwFileAttributes And FILE_ATTRIBUTE_ARCHIVE) > 0 Then
      If (String(tWDF.cFileName[0]) <> '.') Then
      Begin
        sPathName := sPath + String(tWDF.cFileName);

        Result.Add(String(tWDF.cFileName) + sDel +
                   GetFileSizeAPI(sPathName));
        sAtr := '';
        Inc(iCont);
      End;
  Until (FindNextFile(tHnd, tWDF) <> True);

  //CloseHandle(tHnd);
Var
sAtr:字符串;
sPathName:字符串;
I:整数;
iCont:整数;
第四:坦德尔;
tArrAtr:TStringList;
tWDF:WIN32_查找_数据;
开始
iCont:=0;
sAtr:='';
结果:=TStringList.Create;
tArrAtr:=TStringList.Create;
tHnd:=FindFirstFile(PChar(sPath+'*.*'),tWDF);
如果RightStr(sPath,1)\'
sPath:=sPath+'\';
如果tHnd=无效的句柄值,则
出口
重复
如果(tWDF.dwFileAttributes和FILE_ATTRIBUTE_ARCHIVE)>0,则
如果是(字符串(tWDF.cFileName[0])。),则
开始
sPathName:=sPath+字符串(tWDF.cFileName);
Add(字符串(tWDF.cFileName)+sDel+
GetFileSizeAPI(sPathName));
sAtr:='';
公司(iCont),;
结束;
直到(FindNextFile(tHnd,tWDF)为True);
//关闭手柄(tHnd);

我打赌您有一台64位机器和一个32位进程。进入播放时,
System32
重定向到
SysWOW64

避免重定向程序的最佳方法是执行64位进程。或者您可以列出Sysnative以从32位进程获取64位系统文件夹。您甚至可以禁用文件系统重定向器,但这是一件非常危险的事情,我不推荐这样做


另外,通过调用
FindClose
而不是
CloseHandle
来整理查找句柄。在调用
FindFirstFile
之前,应该添加反斜杠。通过比较全名和那些特殊值来测试特殊的
你能说明你是如何使用
FindFirstFile
FindNextFile
的吗?我想你的问题与此类似,所以问题是:为什么不使用这个Windows API的Delphi翻译?
字符串(tWDF.cFileName[0])“.”)
不是一个很好的检查。文件名可以以
开头(如
.htaccess
),即使Windows资源管理器外壳不允许您键入这样的名称。它找不到哪些文件?有模式吗?例如,它是否缺少所有隐藏的文件?