当我尝试将文件夹添加到存档时出现错误:路径太长



我使用。net Framework 4.0;VS 2015;(DotNetZip.Reduced) v1.9.1.8。当我尝试将文件夹添加到存档时,得到文本异常:

路径太长

示例代码:

using (var zipFile = new ZipFile(zipFilePath))
{
  zipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;
  zipFile.AlternateEncodingUsage = ZipOption.Always;
  zipFile.AlternateEncoding = Encoding.UTF8;
  zipFile.ParallelDeflateThreshold = -1;
  var dirPath = @"C:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  zipFile.AddDirectory(dirPath);  <-Exception
  zipFile.Save();
}

文件夹中有一个名为:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.zip

的文件

错误的结果:

路径太长

在基于文件的归档添加中重写(使用相对路径):

using (var zipFile = new ZipFile(zipFilePath))
{
  zipFile.UseZip64WhenSaving = Zip64Option.AsNecessary;
  zipFile.AlternateEncodingUsage = ZipOption.Always;
  zipFile.AlternateEncoding = Encoding.UTF8;
  zipFile.ParallelDeflateThreshold = -1;
  var dirPath = @"C:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
  Directory.SetCurrentDirectory(dirPath);
  var files = Directory.GetFiles(dirPath, "*", SearchOption.AllDirectories).ToArray();
  foreach (var fullFilePath in files)
  {
     var fileName = Path.GetFileName(fullFilePath);
     var relatedPath = fullFilePath.Substring(0, fullFilePath.LastIndexOf(fileName, StringComparison.InvariantCultureIgnoreCase)).Replace(zipDir, "");
     var relatedFilePath = Path.Combine(relatedPath, fileName);
     zipFile.AddFile(relatedFilePath);   <-Exception
  }
  zipFile.Save();
}

错误相同:

路径太长

我试图调用Path.GetDirectoryName()方法,但它也返回一个错误:

指定的路径、文件名或两者都太长。完全限定文件名必须小于260个字符,且

目录名必须小于248个字符。

我找到了很多的解决方案,但得到了工作,并没有工作(因为具体的应用程序到新版本框架'a不能去)。

  • 使用4.6.2框架。在App.ConfigSwitch.System.IO.UseLegacyPathHandling = false; Switch.System.IO.BlockLongPaths = false
  • 中设置UseLegacyPathHandling = false选项
  • 提到组策略并包含选项配置>管理模板>系统>文件系统>启用NTFS长路径,或通过清单<ws2:longPathAware>true</ws2:longPathAware>
  • 启用该选项
  • 在路径中使用前缀\?(我理解为新版本的框架)
  • 使用GetShortPathName函数....将路径转换为8.3格式的文件(错误仍然)

也许有人面临这样的问题。我很乐意听取任何建议。谢谢。

如果你的路径太长,你就无能为力了。在这种情况下,即使您可以进一步移动Windows限制,您的应用程序也无法在非特别配置的系统上正常工作。

你可以把你要用的文件复制到一个临时文件夹,比如C:temp,然后从那里把文件添加到存档中。

您甚至可以用仅由1或2个字母组成的目录名模拟相同的文件夹树结构,然后将完整的(但实际上更短的)目录路径映射到某个地方的原始路径(例如在文件上),以便您可以稍后用相同的名称重建原始文件夹树结构。

相关内容

最新更新