1

これは非常にあいまいな質問のように思えますが、次のようになります。

ファイルパスの周りに引用符を追加しながら、文字列リテラルを DirectoryInfo 列挙 (ファイルパスを含む) と連結する方法はありますか? さらに、DirectoryInfo 列挙を文字列に変換するときにバックスラッシュが二重にならないようにするにはどうすればよいですか? 私の状況は次のとおりです。

DirectoryInfo filePathDirectory = new DirectoryInfo(filePath);
Process a = new Process();

a.StartInfo.FileName = "C:\\Windows\\system32\\lpr.exe";
a.StartInfo.Arguments = "-SServername.Domain.net -Plp " + "\"" + filePathDirectory + "\"";
a.StartInfo.UseShellExecute = false;
a.Start();
a.WaitForExit();

filePathDirectory次の値で始まります。

{\\ServerName\Share\Folder\Folder\FileName.xls}

私が思うに、一度連結された文字列に変換されa.StartInfo.Arguments、次の値が割り当てられます。

-SServername.Domain.net -Plp \"\\\\ServerName\\Share\\Folder\\Folder\\FileName.xls\"

パス内のバックスラッシュの数が 2 倍になるため、これは悪いことです。パスにバックスラッシュが追加されていないことを確認するにはどうすればよいですか?

さらに、引用符を追加するために、バックスラッシュ エスケープ シーケンスを使用しました。しかし、このエスケープ シーケンスのバックスラッシュが誤って文字列に追加されてしまいました。に含まれるファイル パスの前後に引用符を追加するにはどうすればよいa.StartInfo.Argumentsですか?

PSこれが理にかなっていることを願っています。説明が必要な場合は質問してください。

4

1 に答える 1

2

バックスラッシュは二重化されておらず、引用符のバックスラッシュも「存在しません」。Console.WriteLine(a.StartInfo.Arguments)またはで確認できますMessageBox.Show(a.StartInfo.Arguments)

デバッガーで表示されているのは、翻訳されていないエスケープ文字を含む文字列の表現です。IDE に入力する必要があるのと同じです。

例:

string s = "\"";

これはデバッガーでは次の"\""ように表示されますが、画面では次のように表示されます"

ここに画像の説明を入力

于 2012-09-21T13:59:53.470 に答える