当path有多个反斜杠时,File.Exist返回true

时间:2015-08-15 15:47:33

标签: c#

我有一个接受用户输入并对文件执行操作的应用程序。用户选择一个文件,它可能会移动它,删除它,重命名它,ftp等等。应用程序使用哈希表来存储最近使用的文件及其路径。

我现在正在研究的主要问题之一是加载项之一是错误地保存路径,它正在保存它:C:\ David \\ File.txt

处理文件io的应用程序部分尝试在使用File.Exists(路径)调用执行 stuff 之前确保文件存在。即使对于上面的示例,此调用也返回true。任何人都可以解释为什么会这样吗?

我面临的问题是,除了一个模块正确地保存路径之外,与文件交互的某些模块正在接受错误的路径并且正常工作而其他人看到并崩溃。虽然目前我要通过正确保存路径来解决这个问题,但我想了解这里发生了什么。

1 个答案:

答案 0 :(得分:2)

你有一个错误的前提:C:\David\\File.txt是一条无效的道路。 Windows中可以接受多个反斜杠。在命令提示符中尝试notepad C:\David\\File.txt作为实验 - 它应该可以正常工作。

有关详细信息,请参阅此other SO q/a重申此信息。任何数量的反斜杠都可以,这可以作为一种“简单”的方式来组合路径,而不必担心反斜杠的数量。例如,用户可以提供C:\DavidC:\David\,您可以添加\test.txt,而无需担心用户提供的输入。但是,Path.Combine是在C#中执行此操作的真正方法。

编辑:要在将路径传递到其他程序之前轻松删除额外的\,请尝试将路径拆分为驱动器和文件夹名称,然后将其组合回一个路径。像这样:

string path = Path.Combine(pathWithManyBackslashes.Split('\\'));

因为Split在分隔符重复时不会创建新条目,所以你可以删除它们。例如,C:\David\\File.txt => [C:DavidFile.txt]。