3

我有一个小问题。APIFindNextFile不会列出目录的全部内容C:\Windows\System32(仅限 Windows 7)。任何人有任何解决方案?

代码[德尔福]:

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);
4

1 回答 1

7

我敢打赌,你有一台 64 位机器和一个 32 位进程。文件系统重定向器进来播放并System32重定向到SysWOW64.

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

此外,您通过调用FindClose而不是CloseHandle. 您应该在调用之前添加反斜杠FindFirstFile...通过将全名与这些特殊值进行比较来测试特殊值。

于 2012-11-25T11:06:02.790 回答