
受け取るプログラムで
”x y.txt”が一つのファイルと見なされるようにするため
yoppiiさんに
GetCommandLine()
を使うのをやめて
__argvや__argc
すればいいという事を教えてもらいいったん解決したのですが
いろいろ調べてみるとまずい場合がまだあるということがわかりました
Windows95のc:\My documをドラッグ実行した場合です
試験用アプリは
#include <windows.h>
#include <string>
using namespace std;
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
string str="";
for(int i=0;i<__argc;str=str+'<'+__argv[i++]+">\n");
MessageBox(NULL,str.c_str(),"Command",MB_OK);
return 0;
}
です
対処方法を教えてください
No.2ベストアンサー
- 回答日時:
コマンドライン文字列を自力で解析したらよいのでは? ファイル名がフルパスで渡されるのなら、各ファイル名の始まりは"C:"や"D:"のようにドライブ名になります。
#ネットワークファイルの場合は"\\"で始まってるかもしれない。(自信なし)
この回答への補足
結局最後の手段に頼ることになってしまいました
しかしお礼で書いたように__argvは使用できません
GetCommandLineを使うしか今のところ情報がありません
しかしこれのフォーマットが新しい質問で書いたものかどうかわかりません
今は98SEと95ですがOSを更新したら動かなくなるプログラムは作りたくないのです
そこでもしお分かりならば新しい質問に回答していただければ幸いなのですが
よろしくお願いします
そうですね
最後の手段にとっておきます
参考に次のアプリを考えたのですが空白が2回続くと__argvを使うやり方は破綻しますね
#include <windows.h>
#include <string>
#include <list>
using namespace std;
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
list<string>L;
list<string>::iteratorp,q;
stringstr="";
for(int i=0;i<__argc;L.push_back(__argv[i++]));
p=++(q=L.begin());
while(p!=L.end())
{
if(p->find(':')==p->npos)
{
*q+=' '+*p;p=L.erase(p);
}
elseq=p++;
}
for(p=L.begin();p!=L.end();str+='<'+*(p++)+">\n");
MessageBox(NULL,str.c_str(),"Command",MB_OK);
return 0;
}
ありがとうございました
No.1
- 回答日時:
> いろいろ調べてみるとまずい場合がまだあるということがわかりました
> Windows95のc:\My documをドラッグ実行した場合です
なにがどうまずいか説明してください。
この回答への補足
素早い回答ありがとうございます
Windows95で
ディレクトリ"c:\My docum"を
質問のプログラムにドラッグ実行すると
メッセージボックスに
<c:\My docum>
と表示したいのに
<c:\My>
<docum>
と表示されてしまい一つのディレクトリが2つのディレクトリと見なされるのです
98だとMy documがMydocu~2に変換され事なきを得るのです
しかし98でもいつも事なきを得るかどうかはいろいろ試してみないとわかりません
古い95マシンも持っていて使いたいのでどうしてもなおしたいのです
よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
継承されたABのクラスのポイン...
-
templete における typedef
-
VC++で
-
listをvectorにコピーするときに
-
アンワインド セマンティクス
-
プログラミング言語Cとプログラ...
-
c++で日本語を処理したい
-
Visial C++おけるπの使い方
-
違い
-
C++でのeの近似値の求め方
-
makefileでコンパイルしたい
-
VC++2010での漢字の引数の取り...
-
Linux Ubuntu19.10でQt5.14.1の...
-
enumの値から定義名を文字列化...
-
空白を含む名前のファイル等を
-
C++で日本語の処理がしたいです
-
このプログラミング誰か教えて...
-
C++型変換について
-
もし~ならば~。
-
構造体の各メンバにfor文からア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
#define中の#のエスケープ
-
std::map の const 修飾について
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
-
ヘッダーファイルがインクルー...
おすすめ情報