Tag: sharpziplib

打开使用EPPlus创建的.xlsx文件并使用ICSharpCode.SharpZipLib压缩到一个文件夹时出现问题

我正在使用EPPlus创建ExcelPackages(xlsx文档)列表,并将它们作为ZipEntries添加到ZipOutputStream中。 我认为Excel文档应该是有效的,因为当我将其中一个文件写入Response对象而不进行压缩时,我可以正常打开它们。 zip文件夹是按预期创建的,文件在那里并且似乎没有空,但是当我尝试打开它们时,我在Excel中收到以下错误: Excel无法打开文件{Name} .xlsx,因为文件格式或文件扩展名无效。 validation文件是否已损坏,以及文件扩展名是否与文件格式匹配 List documents = new List(); List fileNames = new List(); //Code for fetching documents and filenames here (removed for the sake of readability) Response.Clear(); Context.Response.BufferOutput = false; Response.ContentType = “application/zip”; Response.AppendHeader(“content-disposition”, “attachment; filename=\”random-foldername.zip\””); Response.CacheControl = “Private”; Response.Cache.SetExpires(DateTime.Now.AddMinutes(3)); ZipOutputStream zipOutputStream = new ZipOutputStream(Response.OutputStream); zipOutputStream.SetLevel(3); //0-9, 9 being the highest level […]

将zip条目解压缩到另一个Zip文件

任何人都可以告诉我为什么以下代码不起作用? 我正在使用SharpZipLib API用于Zip流,最新版本DL今天从他们的网站。 我试图使用这个逻辑将一个zip文件的内容合并到另一个zip文件,而不必在磁盘上执行IO,因为预期的zip文件可能包含windows的保留文件名。 我尝试过多个不同的源和目标zip文件(那些包含保留名称和不包含的名称)。 代码不会抛出任何exception,如果在每次写入操作之前检查缓冲区,您可以看到它包含实际数据,但在整个操作完成后,目标zip文件的大小没有改变,您可以探索它确认没有新文件(代码应该添加的文件)实际上已添加到目标文件中。 🙁 public static void CopyToZip(string inArchive, string outArchive) { ZipOutputStream outStream = null; ZipInputStream inStream = null; try { outStream = new ZipOutputStream(File.OpenWrite(outArchive)); outStream.IsStreamOwner = false; inStream = new ZipInputStream(File.OpenRead(inArchive)); ZipEntry currentEntry = inStream.GetNextEntry(); while (currentEntry != null) { byte[] buffer = new byte[1024]; ZipEntry newEntry = new ZipEntry(currentEntry.Name); […]

如何在流中使用ICSharpCode.ZipLib?

我对保守的头衔和我的问题本身感到非常抱歉,但我迷路了。 ICsharpCode.ZipLib提供的示例不包括我正在搜​​索的内容。 我想通过将其放入InflaterInputStream(ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream)来解压缩byte [] 我找到了解压缩function,但它不起作用。 public static byte[] Decompress(byte[] Bytes) { ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream stream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(Bytes)); MemoryStream memory = new MemoryStream(); byte[] writeData = new byte[4096]; int size; while (true) { size = stream.Read(writeData, 0, writeData.Length); if (size > 0) { memory.Write(writeData, 0, size); } else break; } stream.Close(); return memory.ToArray(); } 它在行引发exception(size = […]

C#:仅提取压缩文件(不带文件夹)

使用SharpZip lib,我可以轻松地从zip存档中提取文件: FastZip fz = new FastZip(); string path = “C:/bla.zip”; fz.ExtractZip(bla,”C:/Unzips/”,”.*”); 但是,这会将未压缩的文件夹放在输出目录中。 假设bla.zip中有一个我想要的foo.txt文件。 有没有一种简单的方法来提取它并将其放在输出目录(没有文件夹)?

我应该在SharpZipLib中选择哪种压缩类型?

我有一个文件传输应用程序,可以发送文件和文件夹。 (服务器 – 客户端) 我试图通过TCP(套接字)发送数据,我已经为传输数据的方式做了一些规则,所以如果它发送一个包含许多文件的大文件夹,它应该首先将它们压缩成一个zip文件然后当发送的zip文件,接收器必须解压缩它。 所以我决定使用SharpZibLib ,我对此有疑问。 我应该为我的应用选择哪种类型的压缩? 我读到了ZIP和GZIP之间的差异,发现GZIP有更好的压缩来减小尺寸,而且我以后不需要从GZIP文件中提取特殊文件,所以不需要使用ZIP而不是GZIP! 但是在那个库中有很多类型我还不知道,所以我应该使用GZIP还是其他类型对我的应用程序更好? PS: 首先是时间的优先级,使用SharpZipLib的目的是将(太多文件)放在一个文件中,这样发送的速度比发送(太多文件)的速度要快得多。 更多细节在这里 。

ICSharpCode.SharpZipLibvalidationzip文件

对C#使用ICSharpCode.SharpZipLib,如何validation传递的文件实际上是一个有效的zip文件(不是右键单击并重命名为.zip)? [HttpPost] public ActionResult Upload(HttpPostedFileBase fileData) { if (fileData != null && fileData.ContentLength > 0) { if (Path.GetExtension(fileData.FileName) == “.zip”) { var zipFile = Server.MapPath(“~/Content/uploads/” + Path.GetFileName(fileData.FileName)); fileData.SaveAs(zipFile); FileStream fs = System.IO.File.OpenRead(zipFile); ZipFile zf = new ZipFile(fs); foreach (ZipEntry zipEntry in zf) { if (zipEntry.Name.EndsWith(“.htm”) || zipEntry.Name.EndsWith(“.html”)) { return Json(new { success = true }); […]

如何使用ICSharpCode.SharpZipLib将文件夹添加到zip存档

我必须在zip文件中创建两个文件夹,我使用ICSharpCode.SharZipLib.Zip编程方式创建。 我想要: private void AddToZipStream(byte[] inputStream, ZipOutputStream zipStream, string fileName, string fileExtension) { var courseName = RemoveSpecialCharacters(fileName); var m_Bytes = inputStream; if ((m_Bytes != null) && (zipStream != null)) { var newEntry = new ZipEntry(ZipEntry.CleanName(string.Concat(courseName, fileExtension))); newEntry.DateTime = DateTime.Now; newEntry.Size = m_Bytes.Length; zipStream.PutNextEntry(newEntry); zipStream.Write(m_Bytes, 0, m_Bytes.Length); zipStream.CloseEntry(); zipStream.UseZip64 = UseZip64.Off; } } 如何使用ZipEntry创建目录,然后如何将文件添加到Zip存档内的目录?

DLL版本控制错误

我有一个偶尔会抛出以下错误的网站: ‘/’应用程序中的服务器错误。 无法加载文件或程序集’ICSharpCode.SharpZipLib,Version = 0.85.3.365,Culture = neutral,PublicKeyToken = 1b03e6acf1164f73’或其依赖项之一。 定位的程序集的清单定义与程序集引用不匹配。 (HRESULTexception:0x80131040) 现在我知道我确实依赖于这个DLL,但我的系统上有0.85.5版本。 我已经从服务器系统地删除了每个旧版本的DLL,重新编译了所有内容并重新发布。 但无论我做什么,似乎每次重新发布后,有人访问该网站的前一两次,他们都会收到此错误。 然后刷新一次或两次后,错误消失,网站正常运行。 让我更奇怪的是,如果我查看抛出错误的代码行: URLRewriter.ProcessRewritingResult(status, excludedEnum, siteName, viewMode, relativePath); URLRewriter是来自第三方软件包( Kentico CMS – CMS.URLRewritingEngine.dll)的类。 我在该DLL上运行了Dependency Walker,并且在ICSharpCode.SharpZipLib上找不到任何依赖项。 任何想法如何解决这一问题? 编辑:在@ JeremyThompson的建议下,我运行了Process Monitor来捕获错误。 这是一个屏幕转储,突出显示相关部分(出于隐私原因,一个文件夹名称被隐藏)。 您可以通过右键单击它来查看它的完整大小等… 编辑:这是错误的负载跟踪。 这有帮助吗? ===预绑定状态信息=== 日志:用户= MY-SERVER-12 \管理员 日志:DisplayName = ICSharpCode.SharpZipLib,Version = 0.85.3.365,Culture = neutral,PublicKeyToken = 1b03e6acf1164f73(完全指定) 日志:Appbase = file:/// C:/ inetpub / […]

sharpziplib – 你可以添加一个文件而不先复制整个zip吗?

我试图使用sharpziplib将文件添加到现有的.zip文件 – 问题是,zip文件大小为1GB。 当我尝试添加1个小文件(400k)时,sharpziplib会在添加新文件之前创建orig zip文件的副本/ temp – 当可用磁盘空间量小于您尝试的zip文件的2倍时,这会出现问题更新。 例如:1GB zip myfile.zip 1GB zip myfile.zip.tmp.293 ZipFile zf = new ZipFile(path); zf.BeginUpdate(); zf.Add(file); // Adding a 400k file here causes a 1GB temp file to be created zf.EndUpdate(); zf.Close(); 有没有更有效的方法来做到这一点? 谢谢 :-)

使用SharpZipLib的C# – SharpZipLib与Winzip和XP的兼容性?

我正在使用CSharpZipLib库自动压缩一些文件。 问题是生成的zip文件不适用于Winzip(版本8.1)或XP的压缩文件夹。 它适用于7zip。 Winzip给出一个错误, 该文件不是标准的Zip 2.0格式 。 是否有一个可以更改的参数可以使库以Winzip / XP兼容格式进行压缩?