• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WIn32API ディレクトリ内ファイルリストの取得(FindFirstFile不可))

Win32APIディレクトリ内ファイルリストの取得方法

このQ&Aのポイント
  • NTFSのファイル名最大長をサポートするためには、FindFirstFileEx関数ではなくCreateFile関数を使用する必要があります。
  • CreateFile関数を使用してディレクトリを開き、ReadDirectoryChangesW関数を使用してディレクトリの変更を監視することができます。
  • ディレクトリ内のファイルリストを取得するためには、FindFirstFile関数を使用するか、FindFirstFileEx関数のlpFindFileDataパラメータにNULLを渡してください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.1

必要ならNT系のOSチェックをして、その部分だけUnicodeバージョンを使用してみるのはどうでしょうか。 WIN32_FIND_DATAW fd; HANDLE ff = FindFirstFileW(L"C:\\foo\\*", &fd); と呼び出し、取得されたUnicodeパスをマルチバイト文字列に変換する。

spitfiremk9
質問者

お礼

ありがとうございます。 早速試してみます!

その他の回答 (2)

回答No.3

補足 WIN32_FIND_DATAも、ANSI版とUNICODE版があります。 引用 Unicode: Declared as Unicode and ANSI structures.

回答No.2

ちゃんと読みましょう。 MSDN、FindFirstFileから引用 Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。詳細については、MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。

spitfiremk9
質問者

補足

引数のlpFileNameの所ですね。 そこは読んでいます。 しかし、いま問題になっているのはcFileNameなので#1の回答の方法で検証中です。

関連するQ&A