5

私たちのアプリでは、GetOpenFileName 関数を介して表示されるファイル選択ダイアログで複数のファイルを選択できます (この質問は、CFileDialog などを使用しているユーザーにも当てはまります...)

ファイル名フィールドに入力できる文字数には制限があるようです (259 がマジック ナンバーのようです - 理由は不明です)。

OPENFILENAME構造体の次のメンバーを変更しようとしました:

lpstrFile - 4K バイトのサイズの独自のバッファを指します nMaxFile - lpstrFile のサイズに設定します (ANSI をコンパイルしているので、これは事実上 4000

ただし、これらの値は、ダイアログのファイル名フィールドの入力幅を増加させないように見えます。

コントロールに EM_SETLIMITTEXT メッセージを送信して実験するつもりですが、他の誰かが解決策を持っているかどうか知りたいです。

編集-これを自分で解決しました:解決策 私は自分の答えを受け入れることはできませんが、ここでは後世のためです。他の誰かがより良い解決策を持っている場合は、投稿してください。または、将来の検索者が一番上に表示されるように、私の解決策を自由に変更してください。

4

3 に答える 3

4

編集コントロール(少なくとも私の開発環境では)はコンボボックスであることが判明したため、EM_SETLIMITTEXT適切ではありません。

GetDlgCtrl代わりに、ファイルを開くダイアログの親を使用してコンボボックスを追跡し(これはOnInitDialogハンドラーで行います)、にキャストしてからCComboBox*、呼び出しLimitText()て制限を設定します。

これは、CB_LIMITTEXTで作業していない人のためにコントロールにメッセージを送信することによっても行うことができますCFileDialog。ここでの適切な値OPENFIILENAME.nMaxFileは、渡される値である可能性があります。

于 2008-12-26T23:18:01.307 に答える
2

MSDN のファイルまたはディレクトリの命名から:

Windows API (次の段落で説明するいくつかの例外を除く) では、パスの最大長は でMAX_PATH、260 文字として定義されています。

ダイアログからより長い文字列を強制できたとしても、コード化された API を使用すると、後で問題が発生する可能性がありますMAX_PATH

ドキュメントは次のように続けています。

Windows API には、最大合計パス長 32,767 文字の拡張長パスを許可する Unicode バージョンもある多くの関数があります。このタイプのパスは、GetVolumeInformation 関数の lpMaximumComponentLength パラメータで返される値までの、バックスラッシュで区切られたコンポーネントで構成されます。延長された長さのパスを指定するには、"\\?\"プレフィックスを使用します。たとえば、 "\\?\D:\<very long path>". (文字< >は視覚的にわかりやすくするためにここで使用されており、有効なパス文字列の一部にすることはできません。)

于 2008-12-11T23:08:59.213 に答える
0

これは回避できない厳しい制限だと思います。ファイル名の最大長には制限があるため、複数のファイルを選択する場合のみ問題になります。

フォルダー内のすべてのファイルを開くために、これらのダイアログに「すべてのファイル」ボタンを追加しました。それが私が見つけた唯一の回避策です。

于 2008-12-11T23:12:37.240 に答える