NewLifeX / X

Core basic components: log (file / network), configuration (XML / JSON / HTTP), cache (memory / redis), network (TCP / UDP / HTTP), RPC framework, serialization (binary / XML / JSON), APM performance tracking. 核心基础组件,日志(文件/网络)、配置(XML/Json/Http)、缓存(内存/Redis)、网络(Tcp/Udp/Http)、RPC框架、序列化(Binary/XML/Json)、APM性能追踪。
https://newlifex.com
MIT License
1.76k stars 524 forks source link

压缩文件.zip问题 #112

Closed damonxx closed 2 years ago

damonxx commented 2 years ago

CreateFromDirectory压缩文件夹为zip压缩文件后,无法打开压缩文件,提示缺少压缩分卷

nnhy commented 2 years ago

可否写个能够重现该问题的单元测试?

damonxx commented 2 years ago

var di = new System.IO.DirectoryInfo(@"D:\新建文件夹"); System.IO.PathHelper.Compress(di, @"D:\新建文件夹.zip");

这样生成的ZIP文件,用Bandizip打开时出现错误,提示缺少压缩分卷 IMG20220815092919

nnhy commented 2 years ago

经测试,没有发现该问题,PathHelper能够压缩和解压缩文件夹,并且7z能够打开压缩文件

damonxx commented 2 years ago

经测试,没有发现该问题,PathHelper能够压缩和解压缩文件夹,并且7z能够打开压缩文件

压缩成 .7z是没问题的,Newlife.Core用的版本是8.11.2021.1225

nnhy commented 2 years ago

就是压缩zip,现在不支持7z等其它格式了。目前压缩的zip是标准格式

damonxx commented 2 years ago

就是压缩zip,现在不支持7z等其它格式了。目前压缩的zip是标准格式 Newlife.Core版本8.11.2021.1225,.Net Framework 4.0 控制台程序 try { var di = new DirectoryInfo(@"D:\新建文件夹"); PathHelper.Compress(di, @"D:\11.zip"); var fi = new FileInfo(@"D:\11.zip"); PathHelper.Extract(fi, @"D:\11"); } catch(System.Exception ex) { XTrace.WriteException(ex); } catch到的错误: 16:37:38.346 1 N - NewLife.Compression.ZipException: 不是有效的Zip格式! ---> NewLife.Compression.ZipException: 0x00000004处签名错误! 在 NewLife.Compression.ZipEntry.ReadEntry(ZipArchive zipfile, Stream stream, Boolean first, Boolean embedFileData) 在 NewLife.Compression.ZipArchive.Read(Stream stream, Nullable1 embedFileData) 在 NewLife.Compression.ZipArchive.EnsureRead() --- 内部异常堆栈跟踪的结尾 --- 在 NewLife.Compression.ZipArchive.EnsureRead() 在 NewLife.Compression.ZipArchive.get_Entries() 在 System.IO.PathHelper.Extract(FileInfo fi, String destDir, Boolean overwrite)`

nnhy commented 2 years ago

这个是NET40版本,你试试最新的NET60版本,早期版本可能的确有bug。 或者你的项目调整为net4.61或以上,从Nuget引用beta版newlife.core