.NET TIPS コマンドライン引数を取得するには?デジタルアドバンテージ2003/05/30 |
|
|
アプリケーションをコマンド・プロンプトから実行する場合には、そのアプリケーションのEXEファイル名に続けて、起動時のパラメータやオプションを指定することができる。また、エクスプローラ上でEXEファイル上にファイルをドロップすることにより、多くのアプリケーションでは、起動時に開くファイルを指定できる。こうして指定されたパラメータやオプションあるいはファイルは、アプリケーションに対して「コマンドライン引数」として渡される。
コマンドライン引数をセットされたプログラムでは、それを取得して適切に処理しなければならない。C#ではこのコマンドライン引数を、アプリケーションのエントリ・ポイント(プログラムの起動時に呼び出される個所)であるMainメソッドのパラメータとして受け取ることができる。このパラメータの型は文字列の配列である。
次のサンプル・プログラムではコマンドライン引数で指定された文字列を順に表示する。
|
|
指定されたコマンドライン引数を表示するC#のサンプル・プログラム(csargs1.cs) | |
このサンプル・プログラムの実行例は次のようになる。
サンプル・プログラム(csargs1.cs)の実行結果例 |
C言語ではmain関数のパラメータ変数を「argc」と「argv」で記述していたように、C#プログラムではMainメソッドのパラメータ変数は通常「args」と記述する。
なお、C#ではエントリ・ポイントとして認識されるMainメソッドは、次の4つのシグネチャのいずれかでなければならない。
- static void Main()
- static void Main(string[] args)
- static int Main()
- static int Main(string[] args)
C#と同様に、Visual Basic .NET(以下VB.NET)でも文字列の配列をパラメータとするMainメソッドを記述することにより、コマンドライン引数を取得できる。次のサンプル・プログラムは、上記のC#のプログラムをVB.NETで書き直したものだ。
|
|
指定されたコマンドライン引数を表示するVB.NETのサンプル・プログラム(vbargs.vb) | |
VB.NETで記述可能なMainメソッド(Mainプロシージャ)は次の4種類である。
- Shared Sub Main()
- Shared Sub Main(ByVal CmdArgs() As String)
- Shared Function Main() As Integer
- Shared Function Main(ByVal CmdArgs() As String) As Integer
Mainメソッドはプログラムのエントリ・ポイントであるが、Visual Studio .NETを使用してVB.NETでWindowsアプリケーションを作成する場合、デフォルトではMainメソッドはコードとして現れない。これについては「TIPS:VB.NETでアプリケーション起動時に実行されるフォームを変更するには?」を参照していただきたい。
Environmentクラスによるコマンドライン引数の取得
.NET Frameworkでは、Mainメソッドのパラメータ以外でもコマンドライン引数を取得する手段が用意されている。これはEnvironmentクラス(System名前空間)のGetCommandLineArgsメソッドを使用する方法だ。このメソッドもコマンドライン引数を文字列の配列として取得する。ただし、こちらの場合では実行したコマンド名が配列の最初の要素に含まれる。
次のサンプル・プログラムも先ほどと同様に、コマンドライン引数で指定された文字列を順に表示する。
|
|
GetCommandLineArgsメソッドによりコマンドライン引数を取得し表示するサンプル・プログラム(csargs2.cs) | |
Environmentクラスにはコマンドライン全体が入ったCommandLineプロパティも用意されている。このサンプル・プログラムの最後の行では、このプロパティの値も表示している。
さて、サンプル・プログラムの実行例は次のようになる。
サンプル・プログラム(csargs2.cs)の実行結果例 |
実行結果の最初の行には実行したコマンド名が表示されている。最後の行はCommandLineプロパティの内容。 |
表示された実行結果の最初の文字列が、実行したコマンド名(この場合にはcsargs2)となっているのが分かるだろう。通常この最初の文字列はEXEファイルのファイル名となるが、これはコマンドラインで入力した文字列そのままのものだ。つまりプログラムを「c:\c#tips\030cmdargs\csargs2.exe」と入力して実行すれば、この文字列も「c:\c#tips\030cmdargs\csargs2.exe」となる。もし正確なEXEファイルの名前を取得したいのであれば「TIPS:実行ファイルのパスを取得するには?」に示した方法で取得できる。
以上で解説は終わりだが、Mainメソッドのパラメータで取得できるにもかかわらずこのようなメソッドが用意されているのはなぜだろうか。考えられる理由の1つは、Mainメソッドを持たない.NETの言語があり得るからである。
例えばJScript .NETでは、次のようにクラスやメソッドの定義なしにいきなりコードを記述することができる。
|
|
GetCommandLineArgsメソッドによりコマンドライン引数を取得し表示するJScript .NETのサンプル・プログラム(jsargs.js) | |
実際にはコンパイラ(JScript .NETのコンパイラはjsc.exe)により、EXEファイルにMainメソッド(とそのメソッドを持つクラス)が作成されるのだが、JScript .NETではそれを明示的に記述することはできない。
カテゴリ:クラス・ライブラリ 処理対象:コマンドライン引数 カテゴリ:クラス・ライブラリ 処理対象:コンソール・アプリケーション 使用キーワード:Mailメソッド 使用ライブラリ:Environmentクラス(System名前空間) 関連TIPS:VB.NETでアプリケーション起動時に実行されるフォームを変更するには? 関連TIPS:実行ファイルのパスを取得するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|