2016-09-06 5 views
0

コンソールアプリケーション内で、いくつかのパラメータが渡されます。その1つはファイルパスです。パスにスペースが含まれている場合を除いて、これはうまくいきます。 @"folder f/file.exe" シンボルをargs[4]パラメータに追加するにはどうすればよいですか?ファイル名にスペースが含まれている場合の回避策は、のように先に@というシンボルを使用します。Cの文字列の前に@記号を追加する#

boot = new Main(args[2], args[3], args[4], (args.Length == 5) ? "" : args[5], args[args.Length - 1].Equals("-r")); 

私は次のことを試してみましたが、それは私のために動作しませんでした。

boot = new Main(args[2], args[3], @"" + args[4], (args.Length == 5) ? "" : args[5], args[args.Length - 1].Equals("-r")); 

答えて

1

以内に "近い"、その値に引用しますが、ランタイム使用時にagrumentを渡している場合:これはとappliaction内exctractedされます

C:\your_console_application "arg_1_value" "arg 2 value"

引数[0] - >

arg_1_value

引数[1] - >引数2値

+0

これは問題でした。私は今、別のアプリから呼び出すときにこの結果を得ようとしています。私が壊れた後、私は何をしますか? –

+0

これは解決策であり、上部に衝突する必要があります。 –

+0

あなたは受け入れられたaswerとしてマークすることができます –

1

それはあなたが変更する必要は引数はありませんが、あなたはそれを養う文字列:

private void myMethod(string input){ 

} 
myMethod(@"hello"); 
+0

http://i.imgur.com/tS04lZ8.png与え、このエラーhttp://i.imgur.com/P2wZhvh.png –

+0

@MartinMeli '@'はC#構文機能であり、シェル構文機能ではありません。そこに '@ 'を置いてください。 – poke

+0

私はそうでしたが、スペース文字の後に来るものはシェルである新しい文字列とみなされます。私は代わりに二重引用符でそれを渡すでしょう –

0

文字列の前にある@記号は文字列リテラルがどのように変わるだけで、構文の機能です解釈される。それはそれがプリペンドされる実際のリテラルにのみ影響し、そのままの文字列リテラルになります。文字列リテラルがどのように解析されるかにのみ影響しますが、作成される文字列オブジェクトにはそれ以上の影響はありません。すべての逐語文字リテラルには、と同じ文字列オブジェクトを作成する同等の非逐語文字リテラルがあります。たとえば、逐語文字リテラル@"\xy"は、文字リテラル"\\xy"と同等です。

あなたの場合、逐語的文字列リテラルは@""で、すでに他の空の文字列リテラル""と同等です。 @は効果がありません。

逐語文字解析はまた、通常の文字列リテラル内でエスケープする必要のある特定の文字にのみ影響します。それらの文字の場合、それらは文字通りに解釈されるので、それらをエコーする必要はありません。

ただし、スペースの場合は効果がないため、最初は逐語的な文字列リテラルを使用する必要はありません。あなたが単一の文字列としてパスを渡す限り、それは正常に動作するはずです。

関連する問題