|
.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」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




