.NET对文件路径的奇怪行为

时间:2013-03-26 16:32:19

标签: c# .net windows file-io pathname

我无法通过谷歌教授找到任何相关信息,所以我在这里。获取给定的路径名​​称并将其粘贴到Windows资源管理器中。我发现我的代码中的bug生成了带有额外''的路径后,我偶然发现了这个。在目录\分隔符...

之前的路径名中
@"C:\\pathto.\file.ext"

在代码中,.NET会在调用File.Create时接受路径,并且会生成一个文件,但是在这条路径上:

@"C:\\pathto\file.ext"

C:\\pathto.\file.ext复制到Windows资源管理器的地址栏中并观看“。”消失并带你去C:\\pathto\file.ext

这是.NET和Windows的正常行为它不会导致问题,因为'。'在传递给文件操作时,.NET和Windows都将删除它。真正的问题是数据库中的所有文件都有一个带有'。\'的文件名,但是存在于没有'。\'的路径中......和File.Exists()也可以工作,虽然路径不是“真正的”物理位置......

这里发生了什么?

2 个答案:

答案 0 :(得分:4)

这是Windows文件系统的“功能”。 MSDN

  

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

答案 1 :(得分:0)

传入常规路径时,所有普通Windows API都会忽略/删除文件/文件夹名称中的尾随点。

如果您确实需要支持尾随点,则需要使用"\\?\"前缀路径并自行互操作所有调用(因为.Net不支持此文件格式)。有关详细信息,请参阅MSDN: Naming Files, Paths, and NamespacesHow to delete a folder that name ended with a dot (".")?You cannot delete a file or a folder on an NTFS file system volume

以下是显示如何接受长文件路径的PInvoke函数的相关问题:c# call Win32 API for long file paths?