【问题标题】:Concatenate string literals with DirectoryInfo enumeration and adding quotation marks.使用 DirectoryInfo 枚举连接字符串文字并添加引号。
【发布时间】:2012-09-21 13:55:30
【问题描述】:

这似乎是一个晦涩难懂的问题,但在这里:

有没有办法将字符串文字与 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\"

这很糟糕,因为路径中的反斜杠数量增加了一倍。如何确保没有反斜杠添加到路径中?

最重要的是,为了添加引号,我使用了反斜杠转义序列;但是这个转义序列的反斜杠被无意中添加到我的字符串中。如何在a.StartInfo.Arguments 中包含的文件路径周围添加引号?

附:我希望这是有道理的,如果您需要澄清,请提出问题。

【问题讨论】:

    标签: c# concatenation double-quotes directoryinfo lpr


    【解决方案1】:

    反斜杠不加倍,引号的反斜杠也“不存在”。您可以通过Console.WriteLine(a.StartInfo.Arguments)MessageBox.Show(a.StartInfo.Arguments) 进行验证。

    您所看到的 - 在我假设的调试器中 - 是带有转义字符 not 翻译的字符串的表示 - 就像您需要在 IDE 中输入它一样。

    例子:

    string s = "\"";
    

    这将在调试器中显示为"\"",但它会在屏幕上显示为"

    【讨论】:

    • 你是对的。我只是认为这导致了我的流程出现问题,而实际上这似乎是其他事情,需要我提出一个新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2011-10-03
    • 2014-09-17
    • 2018-10-04
    • 1970-01-01
    • 2019-01-22
    相关资源
    最近更新 更多