我想将一个字符串数组传递给main但保留空格

时间:2012-08-09 18:02:18

标签: c# string arguments spaces

我想将一个字符串传递给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 个答案:

答案 0 :(得分:2)

这通常通过在引号中传递参数来处理。

例如,如果您将其称为:

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

您将在第一个arg(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();
    }
}

这可以在不用引号括起路径的情况下工作,但它假定整个路径是单个路径,“单词”之间只有一个空格,并且没有其他参数。就个人而言,我建议用引号括起来,因为这是一个标准惯例。

答案 1 :(得分: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]);
        }
    }
}