首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法绕过FileSystemInfo.Fullname有时抛出的PathTooLongException?

有没有办法绕过FileSystemInfo.Fullname有时抛出的PathTooLongException?
EN

Stack Overflow用户
提问于 2011-08-23 04:54:35
回答 4查看 5.9K关注 0票数 9

我的硬盘上有一些文件,当我访问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做所有的事情吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-23 05:54:00

这看起来很有趣... Codeplex Long Path Wrapper

长路径包装提供了一些功能,可以更轻松地处理长度超过System.IO命名空间当前259个字符限制的路径。使用long path类,项目现在可以使用最多32,000个字符的路径。

我将尝试一下,尽管我立即注意到它没有提供与DirectoryInfo.GetFileSystemInfos()等价的方法,因此需要进行一些修改。

票数 3
EN

Stack Overflow用户

发布于 2017-05-27 07:32:37

从Windows10(或Windows Server2016)和.Net 4.6.2开始,如果打开了注册表设置,并且您的应用程序被标记为“长路径感知”,则可以直接支持长路径。

可以通过本地组策略编辑器(gpedit.msc)访问该设置,该编辑器位于Computer Configuration >管理模板> All Settings > Enable Win32 long paths

为了将应用程序标记为“长路径感知”,请将此部分添加到清单文件中:

代码语言:javascript
复制
<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文件中添加一个部分:

代码语言:javascript
复制
<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个字符)

票数 4
EN

Stack Overflow用户

发布于 2011-08-23 05:00:50

路径长度超过259个字符的程序并不多。对于winapi层来说,MAX_PATH无处不在,这是一个非常严格的限制。它已经被考虑用于.NET,但没有具体的结果。博客文章系列ends here,底部有以前条目的链接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7153491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档