当文件路径无效时,第三方库会出错。我们尝试使用File.Exists()
来处理这种情况,认为当文件路径包含无效字符时它会返回false,但是它返回true 。
这很奇怪(见额外的空格和句号)
string wrong = "myfolder1\\myfolder2\\myfile.txt .";
bool x = File.Exists(wrong);
有没有办法清理文件路径?
new FileInfo(wrong).Name
无法清理它。
我们的主要目的是在将文件路径发送到第三方库之前可靠地确定文件路径是否有效。我几乎觉得这个问题很愚蠢,因为我认为File.Exists()应该这样做。
(我们在.NET 4.0上)
答案 0 :(得分:7)
Windows API会修剪文件名中的尾随句点和空格,如果它不是一段有效的句号。
有关详细信息,请参阅this msdn article。
不要使用空格或句点结束文件或目录名称。虽然底层文件系统可能支持此类名称,但Windows shell和用户界面却不支持。但是,可以将句点指定为名称的第一个字符。例如,“。temp”。
我不知道它是否可行,但 能够使用\\?\
前缀绕过shell,请尝试{{1}并查看是否有效(我现在无法测试此刻,如果它不让我知道,我会删除此部分。)