我使用.Net Framework 4.0; VS 2015; Ionic.Zip.Reduced(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:\AAAAAAAAAAA\AAAAAA\AAAAAAAAAAAAAAA\AAAAAAAAA\AAAAAAAAAAAAA\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\";
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:\AAAAAAAAAAA\AAAAAA\AAAAAAAAAAAAAAA\AAAAAAAAA\AAAAAAAAAAAAA\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\";
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个字符。
我找到了很多解决方案,但是要开始工作并且不起作用(因为应用程序对新版本框架的具体细节&#39; a不能去)。
UseLegacyPathHandling = false
或App.Config
Switch.System.IO.UseLegacyPathHandling = false; Switch.System.IO.BlockLongPaths = false
option
<ws2:longPathAware>true</ws2:longPathAware>
\\?\
In the path(我理解为新版本的框架)也许有人遇到这样的问题。我会很高兴任何建议。感谢。
答案 0 :(得分:1)
如果你的路径太长,你就无法做到这一点。即使您可以进一步移动Windows限制,您的应用程序也无法在该场景中的非临时配置系统上正常运行。
您可以将您必须使用的文件复制到C:\ temp等临时文件夹,并将文件从那里添加到存档中。
您甚至可以模仿相同的文件夹树结构,目录名称只包含1或2个字母,然后将完整(但确实更短)的目录路径映射到原始路径(例如文件),以便您可以稍后重建具有相同名称的原始文件夹树结构。
答案 1 :(得分:0)
也许这个答案可以帮助https://stackoverflow.com/a/1880480/3061797
这并不严格,因为NTFS文件系统支持最多32k字符的路径。你可以使用win32 api和&#34; \?\&#34;将路径前缀设置为使用超过260个字符。
来自.Net BCL团队博客的详细解释。 一个小的摘录突出了长路径的问题