1

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

4

2 回答 2

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:\文档和设置\桌面...

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

using System;

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

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

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

于 2012-08-09T18:06:48.983 回答
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]);
        }
    }
}
于 2012-08-09T18:06:31.350 回答