我需要在配置文件中转义反斜杠吗?
Posted
技术标签:
【中文标题】我需要在配置文件中转义反斜杠吗?【英文标题】:Do I need to escape backslash in a config file? 【发布时间】:2011-08-06 19:41:02 【问题描述】:我有一个配置文件 myapp.exe.config。 在文件中,我有一个以全路径文件名作为值的属性。
<add key="InfoFile" value="c:\temp\info.txt" />
如果我使用单反斜杠或双反斜杠,它似乎可以工作。也就是说,
<add key="InfoFile" value="c:\\temp\\info.txt" />
也可以。这样做的正确方法是什么?
【问题讨论】:
【参考方案1】:你不需要那个。属性值中的任何内容都是字符数据。
由于您使用 C# 读取这些值,它们将被转义,就好像它们是代码中的文字路径字符串一样。
无论如何,您可能想知道 C# 有 @
运算符来声明逐字字符串,这意味着在代码中使用文字路径时不需要转义反斜杠:
string somePath = @"C:\blah\blih\bluh.txt";
【讨论】:
我相信问题是如果您设置这样的字符串,哪种方式是正确的: string m_path = ConfigurationManager.AppSettings["InfoFile"].ToString();此时不能添加“@”。 @SQLDBA 为什么会有这样的结论? :// 因为问题开始于“我有一个配置文件......”你是说你能做到这一点吗? 我不这么认为。当然,您可以在直接代码隐藏中执行您所说的操作,但是如果您是从 OP 正在执行的 app.config 中读取它,那么它实际上只是单斜杠而不是双斜杠。 @SQLDBA 我相信你误解了 OP ...... OP 显然是在谈论 XML 配置文件。我记得建议 逐字字符串 只是为了给他一些 OP 以前不知道的隐藏宝石。就是这样。 app.config(问题标签之一)是一种 XML 文件格式,与 web.config 类似,但主要用于控制台应用程序。【参考方案2】:反斜杠在 XML 中没有特殊含义,因此不应转义。
此外,如果要转义 XML 中的反斜杠,则不会使用 \\
,而应使用 &#92;
。
它使用双反斜杠的原因还在于文件系统是宽容的。您可以使用路径c:\\temp\\info.txt
访问文件c:\temp\info.txt
。
【讨论】:
文件系统不宽容。您可以拥有任意数量的 \。在命令行上试试。哎呀,甚至 URL 的支持!试试***.com/////////////////questions///////////////…【参考方案3】:基本上 URL 或 URI 包含单斜杠 \
所以,最好使用单斜杠。编写代码时出现问题,但在 XML 中使用单斜杠没有问题。
【讨论】:
【参考方案4】:我认为最好防止双反斜杠以防万一,但如果它有效,为什么要更改它。当您将配置值读入应用程序时,可能会将“\\”替换为“\”。
【讨论】:
以上是关于我需要在配置文件中转义反斜杠吗?的主要内容,如果未能解决你的问题,请参考以下文章