65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 2.0 解决 PathTooLongException 异常

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (11投票s)

2007年12月10日

CPOL
viewsIcon

101613

downloadIcon

2723

使用 Unicode 版本的 CreateFileW 函数,我们可以克服在文件操作中遇到的 PathTooLongException 错误。

引言

File.OpenReadFileStream 构造函数这样的文件操作,当处理到绝对路径长度超过 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\
© . All rights reserved.