3

少し質問があります。APIFindNextFileは、ディレクトリの内容全体を一覧表示しません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);
4

1 に答える 1

7

64 ビット マシンと 32 ビット プロセスを使用していると思います。File System Redirectorが再生され、 にリダイレクトSystem32されSysWOW64ます。

リダイレクタを回避する最善の方法は、64 ビット プロセスを実行することです。Sysnativeまたは、リストして 32 ビット プロセスから 64 ビット システム フォルダを取得することもできます。ファイル システム リダイレクターを無効にすることもできますが、これは非常に危険なことであり、お勧めしません。

FindCloseまた、ではなくを呼び出して、検索ハンドルを整理しますCloseHandle。を呼び出す前にバックスラッシュを追加する必要がありますFindFirstFile。そして、特別なものをテストし、完全な名前をそれらの特別な値と比較します...

于 2012-11-25T11:06:02.790 に答える