1

メインに文字列を渡したいのですが、スペースに困っています。

"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\..."

スペースを保持しながら、文字列の 1 つの要素に連結する方法はありますか? コードは、この場合は 2 つだけでなく、特定のファイル パス内の任意の数のスペースでも機能する必要があります。

4

2 に答える 2

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...

それができず、引数が 1 つしかない場合は、いつでも結果を結合できます。

using System;

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

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

これは、パスを引用符で囲まなくても機能しますが、パス全体が単一のパスであり、「単語」の間にスペースが 1 つだけあり、他の引数が配置されていないことを前提としています。個人的には、標準的な規則であるため、呼び出しを引用符で囲むことをお勧めします。

于 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 に答える