アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在作成中のアプリケーションなんですが、NTFSのファイル名最大長(全角255文字,'\0'含めて511バイト)のまでサポートする必要があります。
ディレクトリ内のファイルリストを取得して、順番に処理するんですが、FindFirstFile(Ex)だと、WIN32_FIND_DATAのcFileNameが
TCHAR cFileName[MAX_PATH]  (MAX_PATHは260)
であるために、最大長を持つファイル名が扱えません。

MSDNをみるとCreateFileでディレクトリをオープンできるようですが、実際の読み込み手順(読み込み関数、ディレクトリレコードの構造、EOFチェックの方法など)がわからず困っています。

CreateFileで開いたディレクトリの操作方法、または、その他のディレクトリ操作方法をご存じの方よろしくお願いします。

A 回答 (3件)

必要ならNT系のOSチェックをして、その部分だけUnicodeバージョンを使用してみるのはどうでしょうか。



WIN32_FIND_DATAW fd;
HANDLE ff = FindFirstFileW(L"C:\\foo\\*", &fd);

と呼び出し、取得されたUnicodeパスをマルチバイト文字列に変換する。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/07/19 19:10

補足



WIN32_FIND_DATAも、ANSI版とUNICODE版があります。

引用
Unicode: Declared as Unicode and ANSI structures.
    • good
    • 0

ちゃんと読みましょう。


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

この回答への補足

引数のlpFileNameの所ですね。
そこは読んでいます。

しかし、いま問題になっているのはcFileNameなので#1の回答の方法で検証中です。

補足日時:2003/07/22 18:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!