2012-08-09 23 views
1

我想将一个字符串传递给main,但我遇到了空间问题。我想将一个字符串数组传递给main,但保留空格

我通过串"C:\Documents and Settings\desktop\..."Main(string[] args)和我有:

args[0] = "C:\Documents" 
args[1] = "and" 
args[2] = "Settings\desktop\..." 

但我想要的是:

args[0] = "C:\Documents and Settings\desktop\..." 

任何方式来保持空间,但串联字符串的一个元素?该代码还应该可以在给定文件路径中使用任意数量的空格,而不是在这种情况下为2。

+2

当您使用像'C:\ documents and settings \ desktop ...'这样的参数调用控制台程序时,应该用引号括住参数。这将导致整个字符串显示在'args [0]'中。 – 2012-08-09 18:06:04

回答

2

这通常是通过将参数在引号处理。

例如,如果你把这个为:

yourApp.exe "C:\Documents and Settings\desktop..." 

你会在第一个参数(args[0])得到的字符串。

例如,使用此程序:

using System; 

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     foreach (var arg in args) Console.WriteLine(arg); 

     Console.ReadKey(); 
    } 
} 

如果你运行该用命令行参数为:

"C:\Documents and Settings\desktop..." 

(到位后引号),这将打印:

C:\ Documents and Settings \ desktop ...

如果这不是一个选项,你只有一个参数,你可以随时加入结果:

using System; 

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     string argument = String.Join(" ", args); 

     Console.WriteLine(argument); 
     Console.ReadKey(); 
    } 
} 

这将工作,没有包装在引号的路径,但它假定整个路径单一路径,在“词语”之间只有一个空格,并且没有其他参数。就我个人而言,我会建议用引号将呼叫包裹起来,因为这是一个标准惯例。

+0

发现这是一个问题的组合。需要引号在正确的地方(意外地把他们在错误的参数)和我的代码的另一部分有一个坏的价值。现在已经修好了,感谢所有的答案! – DevynB 2012-08-09 18:24:14

1

从命令行调用程序时不能引用该字符串吗?

实施例:myprog "This is one argument"

namespace test 
{ 
    class Program 
    { 
     /* 
     * EXAMPLE: test arg1 "arg2 with spaces" arg3 
     * args[0]=arg1... 
     * args[1]=arg2 with spaces... 
     * args[2]=arg3... 
     */ 
     static void Main(string[] args) 
     { 
      for (int i = 0; i < args.Length; i++) 
       System.Console.WriteLine("args[{0}]={1}...", i, args[i]); 
     } 
    } 
} 
相关问题