![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
今、VC++でコンソールアプリをやっていますが、アプリのイメージとして
sample.exe -f C:\a.txt -d のコマンドで、C:\a.txtのファイルを削除し、
sample.exe -f C:\a.txt -s で、ファイルをコンソールに表示するようにしたいですが、問題は指定されたパスの問題ですが、内部でファイルのfopenとか、removeとは、C:\\a.txtしないといけないようですが、
コマンドから入力したパスに対する処理は、どうすればよろしいでしょうか?よろしくお願いします。
No.4ベストアンサー
- 回答日時:
メイン関数を
int main(int argc,char *argv[])
{
中身
}
と書いた場合、実行時に
sample.exe -f C:\a.txt -d
とコマンドラインから打つとmain関数に来た時に
argcは「4」
argv[0]は「sample.exe」
argv[1]は「-f」
argv[2]は「C:\a.txt」
argv[3]は「-d」
となっています。
プログラムは以下のようになります。
void usage(char *ExeName)
{
printf("Usage:%s -f <Filename> <Mode>\n",ExeName);
printf("\tMode\t-d Delete <Filename>\n");
printf("\t\t-s Show <Filename>\n");
}
int main(int argc,char *argv[])
FILE *fp;
char *ExeName = NULL;
char *FileName = NULL;
int DeleteMode = 0;
int ShowMode = 0;
ExeName = *argv;
if (argc == 1) {
usage(ExeName);
return 255;
}
while(--argc) {
argv++;
switch (**argv) {
case '-':
switch(*(++(*argv))) {
case 'f':
if(--argc) {
argv++;
FileName = *argv;
} else {
printf("-fの次に「ファイル名」がありません\n);
usage(ExeName);
return 255;
}
break;
case 'd':
if (!ShowMode) {
DeleteMode = 1;
} else {
printf("-sと-dは同時に指定できません\n);
usage(ExeName);
return 255;
}
break;
case 's':
if (!DeleteMode) {
ShowMode = 1;
} else {
printf("-sと-dは同時に指定できません\n);
usage(ExeName);
return 255;
}
break;
default:
usage(ExeName);
return 255;
}
}
}
if (!FileName) {
printf("「-f ファイル名」がありません\n);
usage(ExeName);
return 255;
}
if (DeleteMode) {
remove(FileName);
} else if (ShowMode) {
fp = fopen(FileName,"rt");
ファイルの中身の表示処理
fclose(fp);
}
return 0;
}
No.5
- 回答日時:
注意。
当方の回答のプログラムは、
sample.exe -f C:\a.txt
のように-sも-dも無い時
sample.exe -fC:\a.txt -d
のように-fとファイル名を空白で区切らない時
には、エラー処理していません(usageを表示しないで処理を進めてしまう)ので、厳密なチェックが必要な場合は判定文を追加して下さい。
No.3
- 回答日時:
質問の意図がよくわかっていないので
はずしていたらごめんなさい。
コマンドから"C:\a.txt"と入力されたらどうなるのか?
(プログラムで\を補う必要があるのか?)
ということですね?
答えは、必要ありません。
そもそもどういう場合に\\と重ねる必要があるのか?
これはCにとっては超基本的な問題です。
本来Cでプログラムを書く前に知っていなければなりません。
ですから、こんな場所で質問するのもおかしいとおもうのですが...
( 1+1の答えは幾つですか?と尋ねるようなものです)
Cでは\で開始される特別な文字コードが存在します
例えば
'\n' 改行
'\0' 文字列終端
などです。(他にもあります)
これらは表面上(人間が読むと)2文字ですが
メモリ上は1バイトのコードとして格納されます。
そして
'\\'
は¥1文字のコード1バイトが格納されます
これは、コンパイラがソースを解釈して
文字列をメモリに格納するの規則です
コマンドラインから入力された場合は
すでにメモリの中に格納されていますので
\を補う必要はありません
No.2
- 回答日時:
そのままでいいですよ
『C:\\a.txt』などと記述するのは Cのソースに文字リテラル(定数)として記述する際の約束です
『\』が特別な意味を持つので 『\』自体を現すのに『\\』という書き方をします
コマンドラインからの入力を受け取った
argvなどには C:\a.txt などは そのまま取得できます
fopen( argv[2], "rt" );
といった具合に使うことが可能です
スペースなどを含むパスの場合パスの前後に『"』を付け加えましょう
sample.exe -f "C:\Program files\a.txt" -d
といった具合にします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- フリーソフト イーファンビューでwebpファイルが開けません 1 2022/07/12 07:07
- マルウェア・コンピュータウイルス pcがウィルス感染しているかもしれません。変な声が聞こえます。 1 2022/05/03 00:43
- 数学 線形代数の対称行列についての問題がわからないです。 2 2023/01/08 14:59
- 数学 数学Ⅱの質問! 2 2022/07/23 15:27
- その他(プログラミング・Web制作) 図に示す階層構造で,現在のディレクトリ(カレントディレクトリという)が*印のディレクトリであるとき, 2 2022/11/16 10:55
- HTML・CSS Dreamweaver のテンプレートでの相対パスの設定について 2 2023/06/13 17:28
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
char型2つを結合し、short型に...
-
C言語で型汎用性のある関数を作...
-
ファイルを辞書順に並べ替える...
-
ファイルから数字列を16進数の...
-
reallocとstrtokの併用について
-
【C言語】全角文字の配列を、全...
-
Cプログラムについて
-
printf による16進表示について
-
#defineが使用するメモリ領域に...
-
Ç言語でファイルサイズを変更す...
-
C++で指定文字列のカウント方法...
-
処理系によって。
-
コマンドファイルから、ビット...
-
配列への文字列の格納について
-
構造体メンバの初期化
-
fread処理について
-
fgetsがうまくいきません。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Enterキーを押されたら次の処理...
-
#defineが使用するメモリ領域に...
-
C言語のプログラムで、途中で止...
-
printf による16進表示について
-
空白を含んだ文字列がうまく格...
-
プログラミングの授業の課題です
-
【C言語】全角文字の配列を、全...
-
構造体メンバの初期化
-
Cでファイルの行数をカウントす...
-
char型2つを結合し、short型に...
-
矢印キーを押下してコンソール...
-
C言語で複数列のデータを1列の...
-
終了条件Ctrl+zについて,結果表...
-
Ç言語でファイルサイズを変更す...
-
エラーについて質問です。
-
C言語でのCSVファイルの読み出...
-
C++で指定文字列のカウント方法...
-
VC++でSQLへSELECT文を送ったの...
-
fscanfの使い方
-
c言語で文書を読み込み、単語の...
おすすめ情報