3

パス文字列を引数として Windows フォーム アプリケーションに渡そうとしています。引用符を追加する必要があることを理解しています。現在、以下のコードを使用しています。

DirectoryInfo info = new DirectoryInfo(path);
string.Format("\"{0}\"", info.FullName);

上記のコードは、パスが のような場合に機能しますD:\My Development\GitRepositories。ただしC:\、引数を渡すとC:"、最後の\文字がエスケープ文字として機能するためです。

私は何か間違ったことをしていますか?また、これを行うためのより良い方法はありますか?

前もって感謝します。

4

3 に答える 3

2

Try using ProcessStartInfo and the Process class and spawn your application. This will also give you much more control over how it is launched and any output or errors it returns. (not all options are shown in this example of course)

DirectoryInfo info = new DirectoryInfo(path);

ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.FileName = [you WinForms app];
processInfo.Arguments = String.Format(@"""{0}""", info.FullName);
using (Process process = Process.Start(processInfo))
{
  process.WaitForExit();
}
于 2013-02-11T20:28:44.583 に答える
1

問題は C# でのエスケープです。すべてのバックスラッシュを 2 番目のバックスラッシュでマスクするか、最初の引用符の前にアット マーク (@) を付けます。

string option1="c:\\your\\full\\path\\";
string option2=@"c:\your\full\path\";

とにかく、すべての場合で、文字列の必需品への引用符ではありません。ほとんどの場合、外部プログラムを開始する必要がある場合にのみ使用し、これは引数として必要な場合にのみ使用します。

于 2013-02-10T16:06:12.287 に答える
1

CommandLineArg区切られているspaceため、コマンド引数を渡す必要があります"

これは、Path = が 2 つの引数として送信される場合を意味しますが、単一の引数C:\My folder\として渡される場合です。"C:\My Folder\"

それで

string commandArg = string.Format("\"{0}\"", info.FullName)
于 2013-02-10T16:08:37.697 に答える