/// <summary> /// Method to open an existing storage from stream /// </summary> /// <param name="_stream">Already opened stream with zip contents</param> /// <param name="_access">File access mode for stream operations</param> /// <param name="_leaveOpen">true to leave the stream open after the ZipStorer object is disposed; otherwise, false (default).</param> /// <returns>A valid ZipStorer object</returns> public static ZipStorer Open(Stream _stream, FileAccess _access, bool _leaveOpen = false) { if (!_stream.CanSeek && _access != FileAccess.Read) { throw new InvalidOperationException("Stream cannot seek"); } ZipStorer zip = new ZipStorer() { ZipFileStream = _stream, Access = _access, leaveOpen = _leaveOpen }; if (zip.ReadFileInfo()) { return(zip); } if (!_leaveOpen) { zip.Close(); } throw new System.IO.InvalidDataException(); }
/// <summary> /// Method to open an existing storage from stream /// </summary> /// <param name="_stream">Already opened stream with zip contents</param> /// <param name="_access">File access mode for stream operations</param> /// <param name="_leaveOpen">true to leave the stream open after the ZipStorer object is disposed; otherwise, false (default).</param> /// <returns>A valid ZipStorer object</returns> public static ZipStorer Open(Stream _stream, FileAccess _access, bool _leaveOpen = false) { if (!_stream.CanSeek && _access != FileAccess.Read) { throw new InvalidOperationException("Stream cannot seek"); } ZipStorer zip = new ZipStorer(); //zip.FileName = _filename; zip.ZipFileStream = _stream; zip.Access = _access; zip.leaveOpen = _leaveOpen; if (zip.ReadFileInfo()) { return(zip); } /* prevent files/streams to be opened unused*/ if (!_leaveOpen) { zip.Close(); } throw new System.IO.InvalidDataException(); }
/// <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 List <ZipFileEntry> 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 { ZipStorer tempZip = Create(tempZipName, string.Empty); foreach (ZipFileEntry zfe in fullList) { if (!zfes.Contains(zfe)) { if (zip.ExtractFile(zfe, tempEntryName)) { tempZip.AddFile(zfe.Method, tempEntryName, zfe.FilenameInZip, zfe.Comment); } } } zip.Close(); tempZip.Close(); if (File.Exists(zip.fileName)) { File.Replace(tempZipName, zip.fileName, null, true); } else { 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); }
/// <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 var tempZipName = Path.GetTempFileName(); var tempEntryName = Path.GetTempFileName(); try { var tempZip = ZipStorer.Create(tempZipName, string.Empty); foreach (ZipFileEntry zfe in fullList) { if (!_zfes.Contains(zfe)) { if (_zip.ExtractFile(zfe, tempEntryName)) { tempZip.AddFile(zfe.Method, tempEntryName, zfe.FilenameInZip, zfe.Comment, zfe); } } } _zip.Close(); tempZip.Close(); File.Delete(_zip.FileName); File.Move(tempZipName, _zip.FileName); _zip = ZipStorer.Open(_zip.FileName, _zip.Access); } catch (Exception e) { Debug.Log(e.Message); Debug.Log(e.StackTrace); return(false); } finally { if (File.Exists(tempZipName)) { File.Delete(tempZipName); } if (File.Exists(tempEntryName)) { File.Delete(tempEntryName); } } return(true); }
/// <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 Boolean 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 IEnumerable <ZipFileEntry> 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 { ZipStorer tempZip = Create(tempZipName, String.Empty); foreach (ZipFileEntry 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); }
/// <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("Removing entries is only allowed for file streams"); } //Get full list of entries List <ZipFileEntry> 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 { using (ZipStorer tempZip = ZipStorer.Create(tempZipName, string.Empty)) { foreach (ZipFileEntry zfe in fullList) { if (!_zfes.Contains(zfe)) { if (_zip.ExtractFile(zfe, tempEntryName)) { tempZip.AddFile(zfe.Method, tempEntryName, zfe.FilenameInZip, zfe.Comment); } } } _zip.Close(); } File.Delete(_zip.FileName); File.Move(tempZipName, _zip.FileName); _zip = ZipStorer.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); }
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"); } List <ZipFileEntry> list = _zip.ReadCentralDir(); string tempFileName = Path.GetTempFileName(); string tempFileName2 = Path.GetTempFileName(); try { ZipStorer zipStorer = Create(tempFileName, string.Empty); foreach (ZipFileEntry item in list) { if (!_zfes.Contains(item) && _zip.ExtractFile(item, tempFileName2)) { zipStorer.AddFile(item.Method, tempFileName2, item.FilenameInZip, item.Comment); } } _zip.Close(); zipStorer.Close(); File.Delete(_zip.FileName); File.Move(tempFileName, _zip.FileName); _zip = Open(_zip.FileName, _zip.Access); } catch { return(false); } finally { if (File.Exists(tempFileName)) { File.Delete(tempFileName); } if (File.Exists(tempFileName2)) { File.Delete(tempFileName2); } } return(true); }
public static void UnZip(string fileName) { ZipStorer zip = ZipStorer.Open(fileName, IO.FileAccess.Read); List <ZipStorer.ZipFileEntry> dir = zip.ReadCentralDir(); IO.FileInfo fi = new IO.FileInfo(fileName); IO.DirectoryInfo di = new IO.DirectoryInfo(fi.FullName.Replace(fi.Extension, "")); if (!di.Exists) { di.Create(); } foreach (ZipStorer.ZipFileEntry entry in dir) { zip.ExtractFile(entry, IO.Path.Combine(di.FullName, entry.FilenameInZip)); } zip.Close(); }
/// <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 List<ZipFileEntry> 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 { ZipStorer tempZip = ZipStorer.Create(tempZipName, string.Empty); foreach (ZipFileEntry zfe in fullList) { if (!_zfes.Contains(zfe)) { 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 = ZipStorer.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; }
/// <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, [NotNull] List<ZipFileEntry> zfes ) { if( zfes == null ) throw new ArgumentNullException( "zfes" ); if( !(zip.zipFileStream is FileStream) ) throw new InvalidOperationException( "RemoveEntries is allowed just over streams of type FileStream" ); //Get full list of entries List<ZipFileEntry> 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 { ZipStorer tempZip = Create( tempZipName, string.Empty ); foreach( ZipFileEntry zfe in fullList ) { if( !zfes.Contains( zfe ) ) { if( zip.ExtractFile( zfe, tempEntryName ) ) { tempZip.AddFile( zfe.Method, tempEntryName, zfe.FileNameInZip, zfe.Comment ); } } } zip.Close(); tempZip.Close(); if( File.Exists( zip.fileName ) ) { File.Replace( tempZipName, zip.fileName, null, true ); } else { 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; }