我有一个小问题。 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);
答案 0 :(得分:7)
我打赌你有64位机器和32位进程。 File System Redirector正在播放,System32
重定向到SysWOW64
。
避免重定向器的最佳方法是执行64位进程。或者您可以列出Sysnative
以从32位进程获取64位系统文件夹。您甚至可以禁用文件系统重定向器,但这是非常危险的事情,我不推荐它。
此外,您通过调用FindClose
而不是CloseHandle
来整理查找句柄。您应该在调用FindFirstFile
之前添加反斜杠。并通过将全名与这些特殊值进行比较来测试特殊.
和..
。