我的硬盘上有一些文件会引发PathTooLongException
当我访问Fullname
的财产FileSystemInfo
目的。有什么办法可以解决这个问题(不包括重命名文件,这不是一个选项)?
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx#maxpath其他答案提到建议在文件名上添加“\?\”前缀,但在这种情况下DirectoryInfo.GetFileSystemInfos()
负责创建FileSystemInfo
物体和DirectoryInfo
不接受该前缀,因此无法使用它。
答案 ”C# 代码中的 PathTooLongException https://stackoverflow.com/questions/1087565/pathtoolongexception-in-c-code/1087612#1087612“没有帮助,因为这是一个多线程应用程序,我无法继续更改当前的应用程序路径。
我真的必须做所有事情吗PInvoke
只是为了能够读取硬盘上的每个文件?
从 Windows 10(或 Windows Server 2016)和 .Net 4.6.2 开始,如果打开注册表设置,则可以直接支持长路径,并且您的应用程序被标记为“长路径感知”。
可以通过本地组策略编辑器访问该设置(gpedit.msc
), 在下面电脑配置 > 管理模板 > 所有设置 > 启用 Win32 长路径
为了将您的应用程序标记为“长路径感知”,请将此部分添加到您的清单文件中:
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
此外,如果您的应用程序面向 .Net 框架版本早于 4.6.2,您需要在 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://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 https://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx
(据我所知,这仅影响基本的 Windows 文件系统 API。非文件系统 API 可能仍限制为 260 个字符)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)