- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WIn32API ディレクトリ内ファイルリストの取得(FindFirstFile不可))
Win32APIディレクトリ内ファイルリストの取得方法
このQ&Aのポイント
- NTFSのファイル名最大長をサポートするためには、FindFirstFileEx関数ではなくCreateFile関数を使用する必要があります。
- CreateFile関数を使用してディレクトリを開き、ReadDirectoryChangesW関数を使用してディレクトリの変更を監視することができます。
- ディレクトリ内のファイルリストを取得するためには、FindFirstFile関数を使用するか、FindFirstFileEx関数のlpFindFileDataパラメータにNULLを渡してください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#30727
回答No.1
必要ならNT系のOSチェックをして、その部分だけUnicodeバージョンを使用してみるのはどうでしょうか。 WIN32_FIND_DATAW fd; HANDLE ff = FindFirstFileW(L"C:\\foo\\*", &fd); と呼び出し、取得されたUnicodeパスをマルチバイト文字列に変換する。
その他の回答 (2)
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
回答No.3
補足 WIN32_FIND_DATAも、ANSI版とUNICODE版があります。 引用 Unicode: Declared as Unicode and ANSI structures.
- はなおか じった(@Jitta)
- ベストアンサー率42% (69/161)
回答No.2
ちゃんと読みましょう。 MSDN、FindFirstFileから引用 Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。詳細については、MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。
質問者
補足
引数のlpFileNameの所ですね。 そこは読んでいます。 しかし、いま問題になっているのはcFileNameなので#1の回答の方法で検証中です。
お礼
ありがとうございます。 早速試してみます!