2015-08-15 73 views
-1

我有一个接受用户输入并执行的东西文件的应用程序。用户选择一个文件,它可能会移动它,删除它,重命名它,ftp等。应用程序使用一个散列表来存储最近使用过的文件及其路径。File.Exist返回true,当路径有多个反斜线

我期待到现在的主要问题是加载项中的一个保存路径不正确,它是将其保存为这样:C:\大卫\\ FILE.TXT

应用程序的一部分处理文件IO尝试通过File.Exists(path)调用确保文件存在之前做东西。即使对于上述示例,此调用仍然返回true。任何人都可以解释为什么这可能是?

我现在面临的问题是,除了一个模块保存路径不正确,与该文件交互某些模块正在接受不正确的路径和做工精细而其他人看到它和崩溃。虽然目前我将通过正确保存路径来解决这个问题,但我想了解这里发生了什么。

+3

为什么你考虑的路径'C:\大卫\ File.txt'是“不正确”?其次,我们不能说“File.Exists”是否报告了正确的结果,因为我们不知道你的情况是否实际存在。 – stakx

+0

我同意,关于这条路径没有任何“格式不正确”...... –

+0

@stakx,我们可以安全地假设'File.Exists'报告“正确”的结果。否则,成千上万的开发者可能会从太空中听到尖叫声。 (...把我的脑袋伸出窗外......听着......不,听不到任何东西......):-b – elgonzo

回答

1

你有一个错误的前提:即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]。

+0

感谢您的信息关于Path.Combine。我认为路径无效,如在Windows资源管理器的地址栏中,或通过开始菜单的运行/搜索栏中,C:\ david \\命中错误。 C:\ david \\ file.txt可以通过Windows查找文件并使用默认应用启动它。另外,在技术上我认为记事本C:\ David \\ File.txt只是意味着记事本成功处理了它的参数中的多个反斜杠,尽管其他示例已经足够。那么错误是我们使用的处理FTP函数的第三方工具不支持多个反斜杠。 –

+0

关于命令提示符的好处就是更多的证据表明它是“事情的方式”而不是证据。我编辑添加一种方法来规范可能在你的情况下工作的路径,以防你还没有想到什么。 – 31eee384