• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6.0で、ファイルのマルチセレクトダイアログでエラーがでます。)

VB6.0でファイルのマルチセレクトダイアログでエラーが発生する

このQ&Aのポイント
  • VB6.0でファイルのマルチセレクトダイアログを使用する際に、エラーが発生しています。
  • 少ないファイルの選択ではエラーが発生しないが、250個以上のファイルを選択しようとするとエラーが発生します。
  • コードを確認しても問題が分からず、修正方法がわかりません。アドバイスをいただけないでしょうか。

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

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

おそらく、バッファサイズの問題でしょうね。 .nMaxFile = 257 'ファイル名のバッファのサイズを設定 .lpstrFileTitle = String(257, Chr(0)) 'フルパス用のバッファを確保 .nMaxFileTitle = 257 'フルパス用のバッファのサイズを設定 .lpstrFile = String(257, Chr(0)) 'ファイル名のバッファを確保 普通に考えると、250どころか50ファイルも同時選択できないバッファサイズでしょうね。 その上で、apiGetOpenFileName関数からの返り値を、エラーチェック(返り値がvbNullStringであるか否か)もせずにUBound(GetFileName)としている為に、エラー発生というところですね。 バッファサイズの257ってのは、Windowsのフルパスファイル名が最長(アスキーコードで)256バイトってのに合わせたサイズだと思われます。 つまり、1ファイル限定であれば全然問題ない関数仕様。 1ファイル限定のサンプルコードを流用ってとこですかね? テストで10ファイル程を選択してエラーにならなかったのは、通常の運用方法ではそれほど深いフォルダ階層にとてつもなく長いファイル名を付けることはない、という偶然によって問題が顕在化しなかったというダケですね。 ※個人的には、250ファイルも同時選択する可能性があるのであれば、ファイルダイアログは使わずに、独自画面を作成して少しでも選択しやすいようにします。 さらに、エクスプローラからのドラッグ&ドロップ機能も付けます。

ddtqp
質問者

お礼

回答ありがとうございます。 ご指摘の通りバッファサイズの問題だと思います。 50ファイルくらいまでなら選択できるようになりました。 バッファサイズを大きく取ると、「メモリが不足しています」や「メソッドに失敗しました」などが出てきます。 PCのメモリを増やさないとできなさそうですので、他の人のPCで試してみます。

すると、全ての回答が全文表示されます。

関連するQ&A