调用7z/Aspose.Zip压缩GB级文件夹无正常输出问题求助
问题解决:7-Zip压缩大文件夹无输出/不完整的问题
一、原生7-Zip命令行调用的问题修复
你当前的7z命令参数顺序完全错误,7z的正确语法是:
7z a -t7z <目标压缩包路径> <要压缩的文件/文件夹>
你把压缩包路径、待压缩内容放在了a(添加命令)和-t7z(格式参数)之前,导致7z无法识别有效命令,自然不会生成压缩包,这也是程序运行极快的原因。
修复后的代码:
string strZipName = Path.Combine(strOutputFolder, Path.GetFileName(strInputFolder) + ".7z"); string strWhatToZip = strInputFolder + "\\*"; // 建议指定7z.exe的完整路径,比如 @"C:\Program Files\7-Zip\7z.exe",避免PATH找不到 ProcessStartInfo psi = new ProcessStartInfo(@"7z.exe", string.Format("a -t7z \"{0}\" \"{1}\"", strZipName, strWhatToZip)) { RedirectStandardError = true, RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true }; using (Process p = Process.Start(psi)) { string error = p.StandardError.ReadToEnd(); string output = p.StandardOutput.ReadToEnd(); p.WaitForExit(); // 调试时可以输出错误信息,排查问题 if (!string.IsNullOrEmpty(error)) { MessageBox.Show($"7z错误信息:{error}"); } }
额外注意点:
- 务必确保7z.exe在系统PATH中,或者直接写完整路径,避免进程启动失败
- 重定向标准错误输出,这样能捕获7z返回的错误信息,不会再出现无提示的情况
- 用
Path.Combine处理路径,避免手动拼接出现的斜杠问题
二、Aspose.Zip不完整压缩的问题修复
你的Aspose.Zip代码有两个关键问题:
try/catch只提示"archive failed",完全丢失了异常信息,无法排查问题- 未确认
CreateEntries是否正确递归处理子目录(默认是递归,但如果路径有特殊字符可能出问题)
修复后的代码:
public void Run7Zip(string strInputFolder, string strOutputFolder) { try { Cursor.Current = Cursors.WaitCursor; // 指定压缩级别,默认可能是最快而非最大压缩 var lzmaSettings = new SevenZipLZMACompressionSettings { CompressionLevel = CompressionLevel.Optimal }; using (var archive = new SevenZipArchive(new SevenZipEntrySettings(lzmaSettings))) { // 明确指定递归包含子目录(默认是true,但显式写更稳妥) archive.CreateEntries(strInputFolder, true); string outputPath = Path.Combine(strOutputFolder, $"{Path.GetFileName(strInputFolder)}.7z"); archive.Save(outputPath); } Cursor.Current = Cursors.Default; MessageBox.Show("文件夹已成功归档"); } catch (Exception ex) { // 输出完整异常信息,包括堆栈跟踪 MessageBox.Show($"归档失败:{ex.Message}\n{ex.StackTrace}"); } }
额外建议:
- 不要硬编码输出路径(
d:\\7Z_ManyFilesToCompress.7z),用参数传入的strOutputFolder更灵活 - 显式设置压缩级别,根据需求选择
Optimal或Maximum - 捕获异常时一定要保留完整的错误信息,否则根本不知道问题出在哪个环节
内容的提问来源于stack exchange,提问作者OldAndRetired
相关产品推荐
相关产品推荐

