.NET 2.0 解决 PathTooLongException 异常






3.67/5 (11投票s)
使用 Unicode 版本的 CreateFileW 函数,我们可以克服在文件操作中遇到的 PathTooLongException 错误。
引言
像 File.OpenRead
或 FileStream
构造函数这样的文件操作,当处理到绝对路径长度超过 260 个字符时,会抛出 PathTooLongException
异常。
查看 Win32 API 时,我发现 CreateFileW
(Unicode) 版本的函数支持最长 32000 个字符的文件名,前提是文件路径以 \\?\ 前缀开头。我创建了这个类,它具有与 File.Open
/OpenRead
/OpenWrite
类似的 Open
方法,以保持接口的一致性。
背景
在 CreateFile
API 的 ANSI 模式下,Windows 将总文件长度限制为 260 个字符。当您尝试创建一个新文件并将其重命名为超过 260 个字符的文件名时,您会看到这种效果。Windows 会自动将总文件路径限制为 260 个字符,从 c:\ 开始。
使用代码
我已在 System.IO
命名空间中附加了一个名为 Win32File
的类。它具有与 File.Open
/OpenRead
/OpenWrite
相同的接口。
//Sample Usage
FileStream fs1= Win32File.Open( "Long file name of greater " +
"than 260 char length", FileMode.Open);
StreamWriter sw = new StreamWriter(fs1);
sw.WriteLine("Hello world");
sw.Close();
sw.Dispose();
历史
- 版本 1.0。
- 版本 1.1 -- 更新代码以适应 UNC 路径。前缀需要是 \\?\UNC\。