6

我通过谷歌教授找不到这方面的任何信息,所以我在这里。获取给定的路径名​​并将其粘贴到 Windows 资源管理器中。在我的代码中发现生成带有额外“。”的路径的错误后,我偶然发现了这一点。在目录分隔符之前的路径名中\...

@"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()也可以工作,尽管路径不是'真正的'物理路径地点...

这里发生了什么?

4

2 回答 2

4

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

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

于 2013-03-26T16:36:47.277 回答
0

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

如果您确实需要对尾随点的支持,您需要使用"\\?\"前缀路径并自己互操作所有调用(因为 .Net 不支持这种文件格式)。请参阅MSDN:命名文件、路径和命名空间如何删除名称以点(“.”)结尾的文件夹?并且您无法删除 NTFS 文件系统卷上的文件或文件夹以获取更多信息。

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

于 2013-03-26T16:37:06.250 回答