首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免使用PathTooLongException而使用FileInfo类?

如何避免使用PathTooLongException而使用FileInfo类?
EN

Stack Overflow用户
提问于 2009-08-31 13:01:29
回答 4查看 8.5K关注 0票数 15

如何使用(避免PathTooLongException):

代码语言:javascript
复制
System.IO.FileInfo

路径长度超过260个字符?

是否有类似的类/方法返回与FileInfo类相同的结果?

EN

回答 4

Stack Overflow用户

发布于 2009-08-31 13:18:31

据我所知,这并不容易。虽然可以像phoenix提到的那样对streams使用解决方法,但不可能对文件名进行处理。在内部,每个处理文件名的类都会检查长文件名。

您可以实例化FileInfo并使用反射填充私有成员(但不建议这样做),并让FileInfo指向具有长路径的文件。但是,当您尝试使用此对象时,仍然会收到PathTooLongException异常,因为例如,Path类(由FileInfo大量使用)在每次方法调用时都会检查长路径。

因此,只有一种正确的方法可以获得无问题的长路径支持--实现您自己的一组模仿FileInfo行为的类。它不是很复杂(可能只是安全性),但很耗时。

更新:这里甚至有两个现成的解决方案:AlpfaFSZeta Long Paths

票数 10
EN

Stack Overflow用户

发布于 2009-08-31 13:25:16

在工作中,我们经常处理长路径,因此我们基本上必须使用自己的System.IO来完成。不是真的,但是我们重写了文件、目录、FileInfo、DirectoryInfo和路径,仅举几例。基本前提是,从Unicode应用程序接口的角度来看,这一切都是可能的,所以您最终真正需要做的就是调用Win32 Win32函数的Unicode版本,然后就可以了。这是一项繁重的工作,有时会令人头疼,但真的没有更好的方法来做到这一点。

票数 7
EN

Stack Overflow用户

发布于 2013-02-16 13:46:57

微软TechNet上有一个很棒的库,可以用来解决长文件名的问题,它叫做,并且它有自己的来自System.IO的关键方法的版本

例如,您可以替换:

代码语言:javascript
复制
System.IO.Directory.GetFiles 

使用

代码语言:javascript
复制
Delimon.Win32.IO.Directory.GetFiles

它可以让你处理长文件和文件夹。

来自网站:

Dlimon.Win32.IO取代了System.IO的基本文件功能,并支持最多32,767个字符的文件和文件夹名称。

这个库是在.NET Framework4.0上编写的,可以在x86和x64系统上使用。标准System.IO命名空间的文件和文件夹限制可以处理文件名中包含260个字符、文件夹名中包含240个字符的文件(MAX_PATH通常配置为260个字符)。通常,您在使用标准.NET库时会遇到System.IO.PathTooLongException错误。

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

https://stackoverflow.com/questions/1357358

复制
相关文章

相似问题

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