【问题标题】:Replace \ with \\ doesn't work for specific variable将 \ 替换为 \\ 不适用于特定变量
【发布时间】:2019-12-17 10:21:30
【问题描述】:

我正在尝试用\\ 替换\,它适用于除我需要处理的特定变量之外的所有内容。抛出错误Illegal characters in path. 可能是因为它认为 \t 是一个字符,它是制表符,因此不允许在路径中

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

public class WebsiteConfig
{
   public string Name { get; set; }
   public string Directory { get; set; }
}

我试过了 var escapedir = Regex.Replace(Directory, @"\\", @"\"); 以及我可以形成 var escapedir = Directory.Replace("\", "\\"); 的任何可能方式。

尝试Regex.Replace("C:\test", @"\", @"\\");(C:\test 与 Directory 中的完全相同)运行良好,然后在 foreach 中我尝试将 Directory 与文件名结合起来。

当前代码的“转储”:

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");
  }
}

还有 config.json:

{
  "WebsiteConfigList": [
    {
      "Name": "test",
      "Directory": "C:\test"
    }
  ]
}

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

【问题讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • @SamuelLiew 请重新打开。找到了答案,我相信它是主题。进行了研究。示例已发布。它是可复制的。
  • 这不是题外话。已经编辑过了,这是一个可以重现的真实问题,并且已经找到了答案。请重新打开,以便日后他人解答和查找。
  • 您的 JSON 文件制作不当。 \t 是一个 JSON 转义序列。
  • 是的。 anwser 找到了解决方法。

标签: c# backslash


【解决方案1】:

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

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

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

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

顺便说一句,Regex.Replace 很强大,string.Replace 就足够了。


您似乎没有大型 JSON 文件,但如果有,请在 string.Replacelarge files 上阅读此处。

【讨论】:

    【解决方案2】:

    如果您无法将源 JSON 更改为 "C:\\test" 而不是 "C:\test",则检测选项卡并将其替换为您想要的内容

    string escapedir = Regex.Replace(dir, @"\t", @"\\\\t");
    

    【讨论】:

    • 这会导致C:\normalC:\test\ready 之类的问题。显然,您可以将正则表达式扩展为 @"\\([trn])", @"\\$1",但如果您忘记了一个,您将遇到麻烦。
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2019-01-09
    • 2022-12-14
    • 1970-01-01
    相关资源
    最近更新 更多