ab.com コミュニティ
https://www.activebasic.com/forum/

ファイルの複数選択
https://www.activebasic.com/forum/viewtopic.php?t=2668
ページ 11

作成者:  水波形 [ 2011年4月09日(土) 21:53 ]
記事の件名:  ファイルの複数選択

お世話になっています。
ファイルの選択ダイアログにて、ファイルの複数選択で躓いてしまいました。

ファイルが一つの場合、lpstrFileにファイルパスが返ってきますが、
複数を選択させるとlpstrFileにそのファイルがあるフォルダーが返ってくるようです。

これはどのようにしてフルパスを取得していくのでしょうか。
すいませんがお知恵をお貸しください。
よろしくお願いします。

作成者:  たかせ [ 2011年4月10日(日) 19:12 ]
記事の件名:  Re: ファイルの複数選択

> ファイルの選択ダイアログにて、ファイルの複数選択で躓いてしまいました。
確認ですがそれはGetOpenFileNameですか?
できればその部分のコードを記載願います。

ちなみにもしGetOpenFileNameであれば
FlagsにOFN_ALLOWMULTISELECTを指定されましたか?

作成者:  HSABP [ 2011年4月10日(日) 20:21 ]
記事の件名: 

複数選択のlpstrFileの中身は

"フォルダ名\01つ目のファイル名\02つめのファイル名\03つめ...\0\0"
と\0で区切って格納されてる。

\0を区切り文字として分解し一つ一つに
wsprintf(fullpath, "%s%s", フォルダ名, ファイル名)
とでもやる

作成者:  水波形 [ 2011年4月10日(日) 21:45 ]
記事の件名: 

たかせん様、HSABP様ご回答ありがとうございます。

HSABP様の助言から、以下のようなコードを書きました。
しかし、フォルダパスは取得出来るのですがファイル名が取得できませんでした。
※wsprintf関数はいまいち使い方が分かりませんので・・・・・・
%s%sって何なのでしょうか?^^;

すいませんが、修正の方お願いします。

作成者:  イグトランス [ 2011年4月10日(日) 23:57 ]
記事の件名: 

こんなかんじでどうでしょうか。
  • MakeStrがEx"\0"を含んだ文字列を扱えないため、FilePathをString型でZeroString使用へ変更。
  • InStr関数呼出の中のEx"\0"もZeroString(1)へ変更(MakeStrと同じようにこれもこうしないとうまくいかないのです)。
  • InStrが返すのは「何文字目であったか」なので、Mid$の「何文字?」の引数とあっていないあたりを修正。
  • 先頭を0文字目とするものと、先頭を1とするものが混在しているので、その調整をより正確にした。

作成者:  水波形 [ 2011年4月11日(月) 22:24 ]
記事の件名: 

>>イグトランス様
回答ありがとうございます。

コードを拝見させていただきましたが、
う~ん・・・
分かったような分からないような・・・・

とりあえずコピペさせていただきました。
少しずつ理解していきたいと思います。
ありがとうございました。


☆宣伝☆
組み込ませていただいたものを公開していますので、どうぞ。
http://www.activebasic.com/forum/viewtopic.php?t=2667

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/