とても困ってます(+_+)
ダイヤログ作成 ⇒ リストボックス作成 ⇒ ドラッグ&ドロップを許可
ここで、リストボックスにファイルをドラッグドロップするとリストにファイルのパスが表示されます。
このパスをchar[255]に読み込んで CFileクラスを使って
CFile File;
File.Open( char, CFile::modeRead );
2,3回目からファイルを開く部分で必ず例外エラーが出てしまいます。
もしかしてファイルのパスを取得する関数をつかわなきゃいけない?
char型に入ってるパス名だとだめ?
でもエラーにならないときもあるし・・・
とにかく知識不足のため匠の方々からのアドバイスを頂きたいです。
ちなみに2日くらい悩んでます。
※リストボックスは必ず使いたいです。
char[255]
の容量が少なすぎるのでは?例えば
char path[5000];
とした時の動作と比べてみてはどうでしょう。
もしくはオープンしたファイルをクローズしてないとか。
毎回同じファイル(100バイト)を開くようにしてもだめなんです・・・
File.Close();ってやってるんですが失敗してるのでしょうか・・・?
ちなみに、ファイルを開くことができなかった場合はメッセージボックスを表示させるような処理にしてるのですが、
そこへ行く前にwindowsから例外処理のメッセージボックスが出て中断してしまいます・・・
せめて、そのリストボックスからどのようにchar型配列に読み込んでいるのか(コード)とか、使っているVCのバージョンとか示せませんか?
char型配列に…ということはマルチバイト文字セットでよいのでしょうか?
VC2005以降はデフォルトでUNICODE文字セットになっています。
そこにchar型配列の先頭アドレスとchar型配列のサイズ(バイト数)を渡すと…
おそらくバッファオーバーフローします。
# char型配列の先頭アドレス渡そうとしているところでワーニングなり出ていると思いますが。
ステップ実行で追いかけることはできませんか?
ファイル名(フォルダ名)にスペースが入っているのにダブルクォーテー
ションで括っていない、に一票。
> そこへ行く前にwindowsから例外処理のメッセージボックスが出て中断して> しまいます・・・
まずデバッガの使いかた(デバッグの仕方)を覚えましょう。
リストボックスから正しく文字列が取得できているかは確認できているのでしょうか?
エラーが出る直前やリストから文字列を取得した直後にMessageBox関数でも入れてみるとか、ブレイクポイントでもいれてみるなどして、そこを確認してみては?
Open関数に至までのプロセスを段階的に追って、ちゃんと思っているとおりの動きをしているかおってみるのが近道だと思います。
ツイート | ![]() |