VisualStudio 2005 で c++でダイアログベースのアプリケーションを作成しています。
ファイルをアイコンにドラッグアンドドロップして開くということをやりたいのですが、ファイルを開いたときにエラーが発生してしまいうまくいきません。対処方法を教えてください。
ソースファイル
::OnInitDialog(){
:
:
:
:
// TODO: 初期化をここに追加します。
DragAcceptFiles();
char *p = AfxGetApp()->m_lpCmdLine;
CFile fin;
if(p[0]!=NULL){
AfxMessageBox(p);
fin.Open(FileName, CFile::typeBinary | CFile::modeRead
| CFile::modeNoTruncate);
}
AfxMessageBox(p)でドロップしたファイルのパスは表示できています。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>>ちなみになぜ ” が入ってしまうのでしょうか?もしわかるようでしたら教えてください。
多分ですが、ファイル名(パス名含む)全体の中に半角スペースがあるのでは無いでしょうか?
その昔、実行ファイルに渡されるパラメータの区切りとして半角スペースを使用していました。
例えば、DOSコマンドのCOPY等で「copy a.txt b.txt」を実行すると、[a.txt]を[b.txt]にコピーする命令となります。
しかし、Windows95時代に入りファイル名に半角スペースが使用できるようになりました。
これを受けて、半角スペースを単純にパラメータの区切りとしてみなす事が出来なくなりました。
よって、半角スペースを含むファイル名の場合は前後に"を付加するようになっています。
「copy "a al.txt" b.txt」で「a al.txt」を一個のファイル名として扱えることが可能なようになっている。(実証済み)
ファイルをドロップした場合では、ファイル名に半角スペースが含まれている事をみなして"を付加していると思われます。
以上、参考までに。。。
No.3
- 回答日時:
AfxMessageBox(FileName)で何が表示されますでしょうか?
「●●.txt」だけだった場合、相対アクセスになっている可能性ありです。
ありがとうございます。
自己解決できました。
ファイル名が
”~~~デスクトップ\input.txt”
となっていました。(デスクトップからドラッグした場合)
Cドライブ等からドロップした場合は、ファイル名が
C:\input.txt
となりうまく動きました。
char *p の最初の文字に ” が含まれている場合、最初と最後の
” を取り除く処理を加えることでうまくいくようになりました。
ご協力ありがとうございました。
ちなみになぜ ” が入ってしまうのでしょうか?もしわかるようでしたら教えてください。
No.2
- 回答日時:
>例えば、実行ファイルのアイコンに●●.txtをドロップした場合、
>”●●.txtが存在しません”というエラーが出てしまいます。
アクセス権とかでしょうか…。
実ファイルをドラッグ&ドロップの筈ですから、存在しないはずはないでしょうし。
あるいは他のアプリが排他で開いている…とか。
パス名などに半角スペースが入っている…かとも思いますが、たぶんちゃんと開けるでしょうな。
ネットワークの共有フォルダから…の場合でも、そうそう接続は切れないでしょうし。
ちょっと解らないです。
No.1
- 回答日時:
>ファイルを開いたときにエラーが発生してしまいうまくいきません。
どのようなエラーが出ますか?
また、どのように「うまくいきません」か?
# 「気分が悪い」と言っただけで、病名をぴたりと言い当てる医者は居ません。
>AfxMessageBox(p);
>fin.Open(FileName, CFile::typeBinary | CFile::modeRead
| CFile::modeNoTruncate);
>AfxMessageBox(p)でドロップしたファイルのパスは表示できています。
FileNameとは何者ですか?
# タイトルの「アイコンに」というのも、少々伝わりにくいと思いますが。
# 「実行ファイルのアイコンに」くらいにした方が伝わりやすいかと。
## 「自作゜ログラム上に表示しているアイコンに」という場合もありますし。
この回答への補足
回答ありがとうございます。
>fin.Open(FileName, CFile::typeBinary | CFile::modeRead
| CFile::modeNoTruncate);
ではなく、
>fin.Open(p, CFile::typeBinary | CFile::modeRead
| CFile::modeNoTruncate);
の間違いです。
申し訳ありません。
また、エラーの内容ですが、
例えば、実行ファイルのアイコンに●●.txtをドロップした場合、
”●●.txtが存在しません”というエラーが出てしまいます。
申し訳ありませんが、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
拡張子を元に戻す
-
forfilesで検索したファイルを...
-
バッチ処理でファイルの中身を...
-
ハードディスク上書き用大容量...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
VBAでテキストファイルのデータ...
-
多数のサブディレクトリ内のフ...
-
MS-DOSのバッチファイルの中で...
-
テキスト(txt)→ワード(docx)へ...
-
テキストファイルで提出とは?
-
renameコマンドについて
-
txtとはWordでなんですか?
-
テキストファイルクリア .net2...
-
バッチファイルからVBAに引数を...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
-
コマンドプロンプトの「%1」と...
-
これってパソコンの最適化が完...
-
C言語 コマンドプロンプトにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
拡張子を元に戻す
-
COPYコマンドで結合すると余計...
-
ファイルの最後に文字列挿入
-
Windowsのバッチファイルを利用...
-
txtとはWordでなんですか?
-
テキストファイルで提出とは?
-
バッチファイル 複数ファイル...
-
UWSCでテキストファイルを開い...
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
renameコマンドについて
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
エクセルの各セルの内容をそれ...
-
MS-DOSのバッチファイルの中で...
-
フルパスの中にワイルドカード...
おすすめ情報