当我访问 FileSystemInfo
对象的 Fullname
属性时,我的硬盘驱动器上有一些文件会抛出 PathTooLongException
。有什么办法解决这个问题(不包括重命名不是一个选项的文件)?
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath其他答案提到的建议在文件名上加上“\?\”前缀,但在这种情况下 DirectoryInfo.GetFileSystemInfos()
负责创建 FileSystemInfo
对象和 DirectoryInfo
不接受该前缀,因此无法使用它。
答案“PathTooLongException in C# code”没有帮助,因为这是一个多线程应用程序,我无法继续更改当前应用程序路径。
我真的必须用 PInvoke
做所有事情才能读取硬盘上的每个文件吗?
最佳答案
从 Windows 10(或 Windows Server 2016)和 .Net 4.6.2 开始,如果打开注册表设置,则可以直接支持长路径,并且您的应用程序被标记为“长路径感知”。
可以通过本地组策略编辑器 (gpedit.msc
) 访问该设置,位于计算机配置> 管理模板> 所有设置> 启用 Win32 长路径
为了将您的应用程序标记为“长路径感知”,请将此部分添加到您的 list 文件中:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
此外,如果您的应用程序以 早于 4.6.2 的 .Net 框架版本为目标,您需要在 App.config 文件中添加一个部分:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false" />
</runtime>
</configuration>
更多信息见:
https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/
https://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx
(据我所知,这只影响基本的 Windows 文件系统 API。非文件系统 API 可能仍限制在 260 个字符以内)
关于c# - 有什么方法可以解决 FileSystemInfo.Fullname 有时抛出的 PathTooLongException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153491/