gpt4 book ai didi

c# - 有什么方法可以解决 FileSystemInfo.Fullname 有时抛出的 PathTooLongException?

转载 作者:太空狗 更新时间:2023-10-29 17:49:51 28 4
gpt4 key购买 nike

当我访问 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com