質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.22%

コマンドライン引数を設定して、実行する方法がわかりません。

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 11K+

jackl

score 8

static void Main(string[] args)
のコマンドライン引数の役割が知りたいと思います。
このプログラムの1つ目の役割は、プログラムの開始部分のメソッドということは理解しています。ただ、コマンドライン引数がなぜ必要か分からなかったので、argsの引数に設定した上で、以下のプログラムの実行をしたいと思っています。Visual Studio上で、ファイル名はProgram.csです。
Console.WriteLine(args.Length);

引数を
aaa bbb ccc ddd
とします。

①コマンドライン引数は、「プログラム名の後に続けて入力した文字列」とのことでしたので、ターミナル上で、「Program.csのパス aaa bbb ccc ddd」と打ったのですが、コマンドが見つからないということでしたが、実行コマンドがわかりません。

②コマンドライン引数のargsを設定する時、以下のtest.rtfのファイルを作りました。
test aaa bbb ccc ddd

このファイルとProgram.csをどう関連付けさせて、ターミナルにコマンドライン引数の要素の「4」を出せれば良いのでしょうか?

以下を参考にしています。
https://ufcpp.net/study/csharp/st_command.html

①と②のどちらかで、解法があれば教えていただけると助かります。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+3

①と②のどちらかで、解法があれば教えていただけると助かります。

何を解決したいのかよくわかりませんが、コンソールアプリであれば、Visual Studio でこのように設定して、

イメージ説明

実行すれば、Console.WriteLine(args.Length); の結果は以下の一行目のように表示されます。まずそれを試してみてください。

イメージ説明

これは実際にコマンドプロンプトから <exe ファイル名> aaa bbb ccc ddd と入力して実行させたのと同じです。もちろん、コマンドラインから実行するには exe ファイルへのパスが通ってなければダメですが。

【追記】

①コマンドライン引数は、「プログラム名の後に続けて入力した文字列」とのことでしたので、ターミナル上で、「Program.csのパス aaa bbb ccc ddd」と打ったのですが、

「プログラム名」即ち私の上のレスで言う <exe ファイル名> は Program.cs ではありません、Visual Studio でコンソールアプリを作ると、デフォルトでは「プロジェクト名.exe」になって、以下のフォルダに生成されます。

イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/17 20:49

    先ほどまで、Macでやっていて、コマンドライン引数を設定する場所がわかりませんでした。
    windows10でやったら、ちゃんとでてきました。しかし、デバッグしても、
    'ConsoleApp1.exe' (CLR v4.0.30319: DefaultDomain): 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
    'ConsoleApp1.exe' (CLR v4.0.30319: DefaultDomain): 'C:\Users\~\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\ConsoleApp1.exe' が読み込まれました。シンボルが読み込まれました。
    プログラム '[24048] ConsoleApp1.exe' はコード 0 (0x0) で終了しました。

    と表示されるだけです。
    そもそもコマンドプロンプトに表示できていません。。。macではターミナルに結果が返ってきましたが。

    キャンセル

  • 2019/02/17 22:10

    Macもコンソール無かった?
    実行プログラムがある場所に移動して、そこで、実行すれば?
    今のMacだと、Unix系らしいので、拡張子があるかどうかは知りませんが、、。 (Unixだと、指定無しで、a.out で普通はファイル名そのままだったかかと。)

    キャンセル

  • 2019/02/17 23:24

    mac でやってるなら、最初の質問の一行目にそれを書くべきです。そうしてもらえていたら自分はこの質問はスルーしてます。時間と労力の無駄でした。

    キャンセル

+2

え?
C#ってコンパイルしませんか?
するなら csファイルじゃなくて exeファイルのほうですよ。

①コマンドライン引数は、「プログラム名の後に続けて入力した文字列」とのことでしたので、ターミナル上で、「Program.csのパス aaa bbb ccc ddd」と打ったのですが、コマンドが見つからないということでしたが、実行コマンドがわかりません。

とありますが、もしかして、

C:/(~略~)/Desktop がカレントディレクトリになっているのに、

D:/csharp/project1 のProgram.cs ってのを開こうとしているとか? (しかもパスじゃなくてファイル名を渡しただけとか)

カレントディレクトリを同じにしてみてください。

参考1

っていうか、質問の参考資料に

以下のようにして(ただし、test.exeという名前で作成した実行ファイルを作成したとします) 実行すると、

(from コマンドライン引数 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C )

とありますが。

todo:

  • 実行ファイルのパスとカレントディレクトリのパスを確認すること
  • 拡張子を確認すること

[追記1]

コマンドライン引数は、そのソフトに汎用性を持たせるためのものです。

GUI (Graphical User Interface) なら 視覚的に操作できるので、問題はなさそうですが、
CUI (Character User Interface) の場合、プログラムがデータを決めることになります。

汎用性がないので、コマンドプロンプトで起動するときに 情報を渡して起動する。

これのためのものです。

Windowsのコマンドプロンプトだと CDコマンドがありますよね?

これを

CD

とだけ打つと現在のディレクトリ ( カレントディレクトリ ) が表示される。

例:

C:/testProjects> CD
C:/testProjects

C:/testProjects>

でもこれに ディレクトリ名かディレクトリパスを渡すとその場所に行く( カレントディレクトリの変更 )。

例:

C:/testProjects> CD csharpCodes

C:/testProjects> CD javaCodes
指定されたパスが見つかりません。

DIRコマンドもそうですね。

C:/testProjects> DIR
rem ここに一覧表示

C:/testProjects> DIR *project1* /S /B
rem ここに"project1" を含むパスの一覧を表示

参考: 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典


[追記2]

そうそう、忘れてた。

ドライブ( C: とか ) から開始するようなパスを絶対パス、カレントディレクトリから見たパスを相対パス と言います。

詳しくは検索してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る