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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- グループウェア 一太郎がイントラで開けません。対処方法を知りたいです。 3 2023/04/04 13:30
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでワークシートを引数として...
-
拡張子を元に戻す
-
forfilesで検索したファイルを...
-
COPYコマンドで結合すると余計...
-
テキストファイルのタブをカン...
-
テキストファイルのファイル名...
-
.txtではなく.logの方が良いの...
-
Windows版のgzipについて
-
VBAでエクセルをtxtに変換する...
-
Perlで同じフォルダにある任意...
-
accessでSQL文を使ってcsvファ...
-
【エクセルVBA】エクセルからテ...
-
【Excel】 VBAを使って毎回名前...
-
ftpコマンドで複数のファイルを...
-
バッチファイルからVBAに引数を...
-
フォルダ名をファイル名の頭に...
-
DOSコマンドによるテキストファ...
-
多数のサブディレクトリ内のフ...
-
コマンドプロンプトで指定した...
-
バッチファイル 複数ファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
バッチファイル 複数ファイル...
-
テキストファイルで提出とは?
-
バッチファイルで文字列削除に...
-
Windowsのバッチファイルを利用...
-
テキストファイルのファイル名...
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
forfilesで検索したファイルを...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
テキストファイルのタブをカン...
-
MATLABで行列を配列に格納する方法
-
renameコマンドについて
-
【Excel】 VBAを使って毎回名前...
おすすめ情報