/// <summary> /// Removes one of many files in storage. It creates a new Zip file. /// </summary> /// <param name="zip">Reference to the current Zip object</param> /// <param name="zfes">List of Entries to remove from storage</param> /// <returns>True if success, false if not</returns> /// <remarks>This method only works for storage of type FileStream</remarks> public static bool RemoveEntries(ref ZipStorer zip, List <ZipFileEntry> zfes) { if (!(zip._zipFileStream is FileStream)) { throw new InvalidOperationException("RemoveEntries is allowed just over streams of type FileStream"); } //Get full list of entries var fullList = zip.ReadCentralDir(); //In order to delete we need to create a copy of the zip file excluding the selected items string tempZipName = Path.GetTempFileName(); string tempEntryName = Path.GetTempFileName(); try { var tempZip = Create(tempZipName, string.Empty); foreach (var zfe in fullList) { if (zfes.Contains(zfe)) { continue; } if (zip.ExtractFile(zfe, tempEntryName)) { tempZip.AddFile(zfe.Method, tempEntryName, zfe.FilenameInZip, zfe.Comment); } } zip.Close(); tempZip.Close(); File.Delete(zip._fileName); File.Move(tempZipName, zip._fileName); zip = Open(zip._fileName, zip._access); } catch { return(false); } finally { if (File.Exists(tempZipName)) { File.Delete(tempZipName); } if (File.Exists(tempEntryName)) { File.Delete(tempEntryName); } } return(true); }
protected virtual Bitmap GetBitmapFromZip(ZipStorer zipStore, int zipFileEntryIndex) { var zipFileEntry = ZipEntries[zipFileEntryIndex]; var memoryStream = new MemoryStream((int)zipFileEntry.FileSize); zipStore.ExtractFile(zipFileEntry, memoryStream); memoryStream.Position = 0; var bmp = (Bitmap)Image.FromStream(memoryStream); memoryStream.Close(); return(bmp); }