【问题标题】:I want to pass a string array to main but keep spaces我想将一个字符串数组传递给 main 但保留空格
【发布时间】:2012-08-07 00:40:06
【问题描述】:

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

【问题讨论】:

  • 当您调用带有C:\documents and settings\desktop... 之类的参数的控制台程序时,您应该用引号将参数括起来。这将导致整个字符串显示在args[0]

标签: c# string arguments spaces


【解决方案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]);
        }
    }
}

【讨论】:

    【解决方案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\桌面...

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

    using System;
    
    internal class Program
    {
        private static void Main(string[] args)
        {
            string argument = String.Join(" ", args);
    
            Console.WriteLine(argument);
            Console.ReadKey();
        }
    }
    

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

    【讨论】:

    • 发现这是多个问题的组合。需要将引号放在正确的位置(不小心将它们放在错误的参数中),而我的代码的另一部分价值不高。现在已修复,感谢所有答案!
    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2021-12-12
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多