4

ファイル パスを に渡そうとしてC# Console Applicationいますが、コンソール アプリケーションに到達するまでに文字列が正しくないという問題があります。

ファイル パス パラメーターを使用して、コマンド ラインからアプリケーションを実行すると、次のようになります。

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\"

Windows ダイアログがポップアップし、アプリケーションが動作を停止したことが通知されます。[デバッグ] オプションをクリックすると、次の結果が表示されますargs[0]

C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject"

最後にまだ引用符があることに注意してください。

2 番目の引数を渡す場合:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\" "any old string"

再びエラーが発生し、デバッグで表示すると、args[0] が次のようになっていることがわかります。

C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject" 任意

なぜこれが起こっているのか、私は困惑しています。私の唯一の推測は、文字列のバックスラッシュが文字列から何らかのエスケープ シーケンスを引き起こしているということですか? 編集:上記の文字列の例でも同じことが起こっていることに気付きました! \" がここで問題を引き起こしているようです。

現在のソリューション ディレクトリのファイル パスを渡したいだけで、ビルド前のイベントから $(SolutionDir) を使用してアプリを呼び出しています。他の方法で現在のソリューションのパスを取得できることを知っています。しかし、これは最も単純であり、期待どおりに機能しない理由が気になります。

4

4 に答える 4

1

/そのため、パスで使用する方が常に優れています

"C:/Users/DevDave/Documents/Visual Studio 2012/Projects/MyProject/" "any old string"

見てください: http://en.wikipedia.org/wiki/Path_(computing)、両方\/パスを使用できますが、シェルの互換性が必要な場合は、使用することをお勧めします/

于 2013-07-24T10:04:06.267 に答える
1

MyApp の後に続くものはすべて、最初の引数 (args[0]) になります。あなたの場合、最初の引数は"C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\". また、文字列の最後にあるクォートは、\"クォートをエスケープして文字列として書きたいという意味で発生するようです。この場合、引用符は文字列を閉じていません。それがあなたの args[0] が後に続くすべてである理由ですMyApp

引用符をエスケープして後ろにスラッシュを入れたくない場合は、そうする必要があります\\"

これを試して、何が起こるか教えてください:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\\"

(二重スラッシュを見てください)

それが役に立てば幸い。

于 2013-07-24T10:06:36.287 に答える
0

ヘンクの答えの続きで\、パスの最後にa を追加することを選択すると、次のようになります。

Henk の回答でこのコードを選択してバグをハックすることを選択した場合 (「より単純ですが、何とか C# で処理する必要があります:」)、発生するいくつかのバグを認識する必要があります。

  1. 複数のパラメーターを渡した場合でも、args[0] のみが設定されます。args の長さは 1 になります。したがって、ハックのために args[0] を複数の部分に分割する必要があります。

  2. 分割したピースの最後にある場合は、"文字を aに置き換える必要があります。\

于 2016-01-17T22:11:48.707 に答える