2016-03-02 81 views
0

在C#.NET控制檯應用程序中,使用雙引號引用那些參數時,Main已採用的string[] args已經處理引用的參數;例如,以下命令行:如何使用單引號而不是雙引號的C#控制檯參數?

MyProgram.exe A "B C D" E 

...將導致args只有3項。但是,當使用單引號代替時:

MyProgram.exe A 'B C D' E 

...然後args將有5個條目。單引號未將B C D轉換爲單個參數。

有沒有辦法讓.NET也把單引號當作有效的命令行參數引用字符,還是這需要一個特殊的命令行參數解析庫?

+1

不要編寫自己的參數解析器; [有**加載他們已經有**](http://stackoverflow.com/questions/491595/best-way-to-parse-command-line-arguments-in-c),其中大多數是可能比你的home-roll會更好(除非你真的想花時間來實現參數解析,那就是)。 –

回答

2

您可以訪問通過

Environment.CommandLine 

整條生產線,並手動處理單引號提取CommandArg行

一種方式只能是:

private static string getCommandLineArgLine() 
     { 
      string fullCommandLine = Environment.CommandLine; 
      int applicationDoubleQuoteEnds = fullCommandLine.IndexOf("\"", 1, StringComparison.InvariantCulture); 
      string commandArgLine = fullCommandLine.Substring(applicationDoubleQuoteEnds + 1).TrimStart(); 

      return commandArgLine; 
     } 

提示:不要如果vs-host進程已啓用,則不會在您的調試環境中使用System.Reflection.Assembly.GetExecutingAssembly().Location - 在這種情況下不會返回正確的位置(這就是爲什麼我讀取最後一個「)

+0

你確定程序名保證用引號括起來嗎? [MSDN似乎沒有表明這一點](https://msdn.microsoft.com/en-us/library/system.environment.commandline(v = vs.110).aspx)。 – Groo

+0

我還沒有嘗試過不同的路徑 - 右 - 可能沒有引號 - 所以它可能更好地調用GetCommandLineArgs() - 並將字符串[]加入到一個字符串.... – Cadburry