繁体   English   中英

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

[英]Strange behavior from .NET regarding file paths

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

@"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()可以工作,虽然路径不是“真正的”物理位置......

这里发生了什么?

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

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

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

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

以下是显示如何接受长文件路径的PInvoke函数的相关问题: c#为长文件路径调用Win32 API?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM