用 \\ 替换 \ 不适用于特定变量

Hac*_*der 6 c# backslash

我想更换一个\带有\\并将其与除特殊变数,我需要它的工作就一切正常。抛出错误Illegal characters in path.可能是因为它认为 \t 是一个字符,它是制表符,因此不允许在路径中

使用 Newtonsoft.Json 将变量从 json 文件加载到类中

public class WebsiteConfig
{
   public string Name { get; set; }
   public string Directory { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过 var escapedir = Regex.Replace(Directory, @"\\", @"\");任何可能的方式来形成var escapedir = Directory.Replace("\", "\\");.

尝试Regex.Replace("C:\test", @"\", @"\\");(C:\test 与目录中的完全相同)工作得很好,然后在 foreach 中我试图将目录与文件名结合起来。

当前代码的“转储”:

var json = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "config.json"));
_config = JsonConvert.DeserializeObject<Config>(json);

foreach(WebsiteConfig website in _config.WebsiteConfigList)
{
  for (int i = 0; i <= 9; i++)
  {
    string dir = website.Directory;
    string escapedir = Regex.Replace(dir, @"\\", @"\\\\");
    var path = Path.Combine(escapedir, "Backedup_" + i.ToString() + ".txt");
  }
}
Run Code Online (Sandbox Code Playgroud)

和 config.json:

{
  "WebsiteConfigList": [
    {
      "Name": "test",
      "Directory": "C:\test"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是显示异常的屏幕截图: 代码截图

Hek*_*eki 2

该问题确实源于\t,但它发生在反序列化期间,而不是Path您可能认为的那样。有多种建议用转义反斜杠替换反斜杠,但此时损害已经造成:

C:\test成为C: est(空格是制表符)。

根据您的要求,更改输入文件不是一个选项,因此您必须在反序列化之前进行转义。我能想到的最简单的方法是:

json = json.Replace(@"\", @"\\");

顺便说一句,虽然Regex.Replace相当强大,但string.Replace足够了。


您似乎没有大型 JSON 文件,但如果有,请阅读此处有关string.Replace大型文件的内容。