将 \ 替换为 \\ 不适用于特定变量
Replace \ with \\ doesn't work for specific variable
我正在尝试用 \
替换 \
,它适用于除我需要它处理的特定变量之外的所有内容。抛出错误 Illegal characters in path.
可能是因为它认为 \t 是一个字符,它是制表符,因此在路径
中是不允许的
使用 Newtonsoft.Json 从 json 文件加载变量到 class
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 与目录中的完全相同)工作完美,然后在 foreach 中我试图将目录与文件名组合。
当前代码的"Dump":
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"
}
]
}
这是显示异常的屏幕截图:
如果您无法将源 JSON 更改为 "C:\test"
而不是 "C:\test"
则检测选项卡并将其替换为您想要的内容
string escapedir = Regex.Replace(dir, @"\t", @"\\t");
问题确实源于 \t
,但它发生在反序列化过程中,而不是您可能认为的 Path
。有多个建议用转义的反斜杠替换反斜杠,但此时损坏已经完成:
C:\test
变成了 C: est
(空格是制表符)。
根据您的要求,不能更改输入文件,因此您必须在反序列化之前进行转义。我能想到的最简单的方法是:
json = json.Replace(@"\", @"\");
顺便说一句,虽然Regex.Replace
很强大,但string.Replace
就足够了。
您似乎没有大 JSON 文件,但如果有,请阅读 string.Replace
on large files 上的内容。
我正在尝试用 \
替换 \
,它适用于除我需要它处理的特定变量之外的所有内容。抛出错误 Illegal characters in path.
可能是因为它认为 \t 是一个字符,它是制表符,因此在路径
使用 Newtonsoft.Json 从 json 文件加载变量到 class
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 与目录中的完全相同)工作完美,然后在 foreach 中我试图将目录与文件名组合。
"Dump":
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"
}
]
}
这是显示异常的屏幕截图:
如果您无法将源 JSON 更改为 "C:\test"
而不是 "C:\test"
则检测选项卡并将其替换为您想要的内容
string escapedir = Regex.Replace(dir, @"\t", @"\\t");
问题确实源于 \t
,但它发生在反序列化过程中,而不是您可能认为的 Path
。有多个建议用转义的反斜杠替换反斜杠,但此时损坏已经完成:
C:\test
变成了 C: est
(空格是制表符)。
根据您的要求,不能更改输入文件,因此您必须在反序列化之前进行转义。我能想到的最简单的方法是:
json = json.Replace(@"\", @"\");
顺便说一句,虽然Regex.Replace
很强大,但string.Replace
就足够了。
您似乎没有大 JSON 文件,但如果有,请阅读 string.Replace
on large files 上的内容。