Windows路径中多个反斜杠的后果是什么?

x8diyxa7  于 2023-05-08  发布在  Windows
关注(0)|答案(2)|浏览(331)

在我的程序中,我经常在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破坏。

6ojccjat

6ojccjat1#

据我所知,没有任何后果,而且在未来的版本中也不太可能被打破,因为很多人会和你做同样的事情。
然而,在C#中合并路径的正确方法是使用Path.Combine,这将为您删除任何额外的反斜杠:

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

r1zhe5dt2#

至少有这样的后果:
如果在驱动器号和冒号后提供两个反斜杠,则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.

相关问题