【问题标题】:What are the consequences, if any, of multiple backslashes in Windows paths?Windows 路径中多个反斜杠的后果(如果有)是什么?
【发布时间】:2015-07-22 13:17:05
【问题描述】:

在我的程序中,我经常在我的 app.config 文件中配置文件名和/或路径。这通常是这样的:

<add key="LogFileDirectory" value="C:\Logs" />
<add key="SaveLogFileTo" value="MyLogFile.txt" />

在我的实际应用程序代码中,我经常将它们与类似这样的代码连接在一起:

var logFile = ConfigurationManager.AppSettings["LogFileDirectory"]
+ @"\" +
ConfigurationManager.AppSettings["SaveLogFileTo"];

现在,上面代码的结果将给出C:\Logs\MyLogFile.txt的日志文件路径,但是,如果最终用户将配置文件中的日志文件目录指定为C:\Logs\并带有尾部反斜杠,我的代码结果在C:\Logs\\MyLogFile.txt 的实际路径中,目录和文件之间有一个双反斜杠。

根据我的经验,这在实践中效果很好。事实上,即使进入命令提示符并执行 cd c:\\\\\\windows\\\ 在实践中也是可行的。

我的问题是,如果有的话,这样的路径会产生什么后果?我不想在生产代码中使用此“功能”,如果它是未记录的并且在未来某个时候可能会在新版本的 Windows 中被破坏。

【问题讨论】:

  • 你听说过 Path 类,尤其是 Path.Combine 方法吗?
  • 如果您担心连接错误,请尝试使用System.IO.Path.Combine
  • 是的,谢谢,我对那个方法有些熟悉,虽然在实践中用得不多。我更感兴趣的是多个反斜杠背后的理论似乎可以毫无问题地工作,以及这是否是一个有意的、记录在案的功能。
  • 那么为什么不在配置文件的文件路径中添加双斜杠以及单个尾随"\" 或在日志文件前面使用字符串文字@ 像这样声明在类级别 private static string logfile { get; set; } 这样的日志文件然后像这样分配 logFile @logFile = var logFile = ConfigurationManager.AppSettings["LogFileDirectory"] 等......
  • 也许this 会有所帮助

标签: c# windows command-prompt


【解决方案1】:

据我所知,没有任何后果,而且它不太可能在未来的版本中被破坏,因为很多人都会和你一样。

但是,在 C# 中组合路径的正确方法是使用 Path.Combine,这将为您删除任何多余的反斜杠:

var logFile = Path.Combine(
    ConfigurationManager.AppSettings["LogFileDirectory"],
    ConfigurationManager.AppSettings["SaveLogFileTo"]);

【讨论】:

  • Path.Combine 需要注意的一件事(今天在另一个答案中咬了我),来自 msdn “如果 path2 不包含根目录(例如,如果 path2不以分隔符或驱动器规范开头),结果是两个路径的连接,中间有一个分隔符。如果 path2 包含根,则返回 path2。"
猜你喜欢
  • 2016-01-06
  • 2020-11-25
  • 2013-01-22
  • 1970-01-01
  • 2014-02-04
  • 2012-11-16
  • 2020-11-12
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多