【问题标题】:String Replace doesn't replace double back slashes in c#字符串替换不会替换 C# 中的双反斜杠
【发布时间】:2014-05-08 05:51:40
【问题描述】:

也许我在这里遗漏了一些东西

我有一个变量 dir 看起来像 \\\\SERVERNAME\\dir\\subdir

我需要它看起来像 \\SERVERNAME\dir\subdir

我使用了 string.Replace 例程,但它没有替换双斜杠,问题是当我尝试按原样使用路径时,它找不到文件。

如何在此处使用 string.Replace 以获得有效路径?

【问题讨论】:

  • 您确定这不仅仅是调试器向您显示的方式吗?它做到了。

标签: c# string replace


【解决方案1】:

dir.Replace(@"\\", @"\") 应该可以解决问题。

【讨论】:

    【解决方案2】:

    在 C# 中,反斜杠字符“\”用于转义字符串中的字符。例如,在字符串“Hello\nworld”中,“\n”代表换行符。因此,一般来说,当 C# 在字符串中看到“\”时,它希望将其视为特殊命令字符的一部分,而不是文字“\”。

    那么,你如何告诉 C# 你想要一个文字反斜杠出现在你的字符串中,它不是特殊命令字符的一部分?你逃脱了反斜杠。并且转义字符也是反斜杠。所以要告诉 C# 你真的想要一个文字“\”出现在你的字符串中(例如,在文件路径中),你使用两个反斜杠:“\\”。

    假设我想将变量设置为以下路径:C:\Temp\FileDrop

    在 C# 中,我必须执行以下操作:

    string myPath = "C:\\Temp\\FileDrop";
    

    我怀疑当您看到一个看起来像\\\\SERVERNAME\\dir\\subdir 的变量值时,它正在转义反斜杠字符,因此变量的实际值是\\SERVERNAME\dir\subdir

    顺便说一句,如果您要从 Windows 资源管理器等复制和粘贴长路径,则必须将反斜杠加倍以逃避它们可能会非常痛苦。所以 C# 有一个特殊的字符串文字字符“@”。如果您在字符串前面加上“@”,那么它将完全按照写入的方式对待字符串。例如

    string myPath = @"C:\Temp\FileDrop";
    

    【讨论】:

    • 谢谢!你回答做到了。我将它连接起来,有些部分保持原样,有些部分用@转义。
    • 很高兴知道这个答案很有用。
    猜你喜欢
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2021-09-02
    • 2018-02-27
    • 2012-06-16
    相关资源
    最近更新 更多