3

当文件路径无效时,第 3 方库会出错。我们试图处理这种情况File.Exists(),认为当文件路径包含无效字符时它会返回 false ,但它返回 true

这很奇怪(请参阅额外的空格和句号)

    string wrong = "myfolder1\\myfolder2\\myfile.txt      .";
    bool x = File.Exists(wrong);

有没有办法清理文件路径?

new FileInfo(wrong).Name不清理它。

我们的主要目的是在将文件路径发送到 3rd 方库之前可靠地确定文件路径是否有效。问这个问题我几乎觉得很愚蠢,因为我认为 File.Exists() 应该这样做。

(我们在 .NET 4.0 上)

4

1 回答 1

7

Windows API 会修剪文件名中的尾随句点和空格,如果它不是句点的话,它会起作用。

有关详细信息,请参阅此 msdn 文章

不要以空格或句点结尾的文件或目录名称。尽管底层文件系统可能支持此类名称,但 Windows shell 和用户界面不支持。但是,可以将句点指定为名称的第一个字符。例如,“.temp”。


我不知道它是否会起作用,但您可以通过使用\\?\前缀绕过外壳,尝试File.Exists(@"\\?\C:\myfolder1\myfolder2\myfile.txt .");看看它是否有效(我现在无法测试这一刻,如果它没有让我知道,我会删除此部分。)

于 2013-06-25T14:47:44.517 回答