none
CFindFile に設定できるパス文字列は260制限がありますが、エクスプローラでは340文字生成できます RRS feed

  • 質問

  • Windows のファイルエクスプローラでは、340文字までフォルダを作成できるのに、CFindFile では260文字しか扱うことができないためエラーが発生してプログラムを運用することができません、エクスプローラーと同等の340文字までフォルダ検索/ファイル検索できるクラスはありますか? ご教示ください VisualStudio2012 プロフェッショナルを使っています

    2014年2月17日 13:33

回答

  • CFindFileクラスはFindFirstFileとFindNextFileのラップです。

    http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

    上記ページに、MAX_PATHの制限を拡張する方法が記述されています。

    // ただしフルパスで指定する必要があります。

    • 回答の候補に設定 星 睦美 2014年2月18日 0:17
    • 回答としてマーク goma0099 2014年2月18日 4:47
    2014年2月17日 15:21

すべての返信

  • CFindFileクラスはFindFirstFileとFindNextFileのラップです。

    http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

    上記ページに、MAX_PATHの制限を拡張する方法が記述されています。

    // ただしフルパスで指定する必要があります。

    • 回答の候補に設定 星 睦美 2014年2月18日 0:17
    • 回答としてマーク goma0099 2014年2月18日 4:47
    2014年2月17日 15:21
  • VS2008付属ののMFCコードを見ると
    CFileFindクラスはMBCS、Unicodeに関わらず_MAX_PATHしか扱えないようなコードですね。
    この場合、WIN32_FIND_DATAW、FindFirstFileW()、FindNextFileW()、FindClose()
    などをを明示的に使って、コードするしかないかもしれません。
    また、Hongliangさんが既にご指摘の通り、パスの前に"\\?\"という接頭辞を追加する必要があります。
    リテラルでは "\\\\?\\"ですね。

    自身の環境のMFCコードを確認してみてください。



    2014年2月18日 1:13
  • CFindFile は、内部処理の大多数の部分でMAX_PATHを前提としたバッファを作るため、検索時にMAX_PATHを超える長さの検索パスを与えることができません(詳しくは、CFindFile::FindFileのソースコードの冒頭部分を見てほしいですが、最初で長さチェックしてはじいています)。

    MAX_PATH より長いパス名でファイル検索したい場合は、直接APIのFindFirstFile(またはFindFirstFileEx)と、FindNextFile を使う必要があります。


    とっちゃん@わんくま同盟, Microsoft MVP for Visual C++ (Oct 2005-) http://blogs.wankuma.com/tocchann/

    2014年2月18日 2:57