Windows路径中有多个反斜杠会导致什么后果(如果有的话)?

3

在我的程序中,我经常有在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新版本中被破坏的功能,我不想在生产代码中使用它。

2
你听说过Path类,特别是Path.Combine方法吗? - Steve
2
如果您担心错误的连接,可以尝试使用System.IO.Path.Combine - Styxxy
那为什么不在配置文件中的文件路径中添加双斜杠和单个反斜杠“\”,或者在日志文件前使用字符串字面量@,就像在类级别上声明日志文件一样: private static string logfile { get; set; } 然后将logFile分配为以下方式: @logFile = var logFile = ConfigurationManager.AppSettings["LogFileDirectory"] 等等... - MethodMan
也许这个链接会有所帮助。 - Yuval Itzchakov
请查看以下两个 Stack Overflow 问题:
  • https://dev59.com/Kn3aa4cB1Zd3GeqPjOFp
  • https://dev59.com/Amkw5IYBdhLWcg3wEmab
- waltmagic
显示剩余2条评论
2个回答

3
我所知道的是没有任何后果,也不太可能在未来版本中出现问题,因为很多人会像你一样这样做。但是,在C#中正确合并路径的方法是使用 Path.Combine,它会自动删除任何多余的反斜杠:
var logFile = Path.Combine(
    ConfigurationManager.AppSettings["LogFileDirectory"],
    ConfigurationManager.AppSettings["SaveLogFileTo"]);

2
需要注意的一件事是 Path.Combine(在另一个答案中让我吃了亏),根据 msdn 上的注释,如果 path2 不包含根目录(例如,如果 path2 不以分隔符字符或驱动器规范开头),则结果是两个路径的连接,其中间有一个分隔符字符。如果 path2 包含根目录,则返回 path2。 - Scott Chamberlain

0

至少有以下这些后果:

如果在驱动器号和冒号之后提供两个反斜杠,则 del 命令无法删除文件:

C:\>del c:\\foo.txt
The filename, directory name, or volume label syntax is incorrect.

C:\>del c:\\bar\foo.txt
The network path was not found.

请在您的代码中添加解释,以便其他人也能理解。 - Faraaz Kurawle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接