前項までの解説で、最低限のファイル処理は行えるようになりました。
しかし、毎回ファイル名を入力するのは面倒です。
エクスプローラ等からドラッグして開けるようになれば大変便利です。
実は、Windowsのコマンドプロンプト画面では、
ファイルをドラッグすれば、ファイル名が自動的に入力されます。
この方法であれば、ファイル名の入力は簡単にできます。
しかし、実行ファイルにファイルをドラッグした場合はできません。
C言語には、アプリケーションの起動時にファイル名を渡す機能があります。
それが、コマンドライン引数です。
これまでmain関数の引数はvoid型として宣言してきましたが、
[ コマンドライン引数 ]
アプリケーション起動時に渡される文字列のこと。
主に処理するファイル名や動作オプションを指定する。
argcはコマンドラインの数、argvは文字配列へのポインタ変数です。int main(int argc,char *argv[]);
このようにすれば、0番目(1番最初)のコマンドラインを表示できます。printf("%s",argv[0]);
コマンドラインの0番目は、アプリケーション自身のファイル名になります。
エクスプローラ等からドラッグしたファイル名は1番目に格納されています。
次のプログラムは、ドラッグされたファイル名を表示する例です。
argcでコマンドラインの数を確認し、1つより多ければコマンドラインがあると判断して、#include <stdio.h> int main(int argc,char *argv[]) { if (argc > 1) { printf("%s\n",argv[1]); } fflush(stdin); getchar(); return 0; }
上の2行は画面の表示を止めるための処理です。実行待ちになり、適当なキーで終わります。fflush(stdin); getchar();
ドラッグされたファイルの名前がフルパスで表示されています。
D:\BCPad\Source\test.exe
[ 実行ファイルの位置 ]
ほとんどの場合、コンパイルしたソースファイルと同じフォルダの中に、
ソースファイル名と同じ名前で実行ファイルが作成されています。
一般的に、コマンドラインにはファイル名の他に、
アプリケーションの動作を指定するオプションを指定することがあります。
例えば、Windowsでファイル名を指定して実行で defrag と指定して起動すると、
デフラグが起動して何もせずに終了しますが、
defrag c: と指定すると、Cドライブのデフラグを開始します。
また、defrag c: -a と指定すると、Cドライブの分析結果だけを表示します。
このような使い方は、パソコン上級者にはおなじみのやり方です。
この例では、 c: と -a という2つの文字列がコマンドラインに渡され、
それをアプリケーション内で解析して、動作を決定しています。
同様のことは、コマンドラインの文字列を調べれば簡単にわかります。
ここでは、-a と -s というオプションの有無を解析する例です。
このプログラムに -a -s というオプションを与えて実行した結果は次の通りです。#include <stdio.h> int main(int argc,char *argv[]) { while (argc > 0) { argc--; if (argv[argc][0] == '-') { if (argv[argc][1] == 'a') printf("-a オプション\n"); if (argv[argc][1] == 's') printf("-s オプション\n"); } } return 0; }
同様にすれば、いくつのオプションにでも対応することができます。
-a オプション
-s オプション