public PackArchive(Stream stream, PackArchiveMode mode, bool leaveOpen) { if (stream == null) { throw new ArgumentNullException("stream"); } Init(stream, mode, leaveOpen); }
public static PackArchive Open(string archiveFileName, PackArchiveMode mode) { FileMode fileMode; FileAccess fileAccess; FileShare fileShare; switch (mode) { case PackArchiveMode.Read: fileMode = FileMode.Open; fileAccess = FileAccess.Read; fileShare = FileShare.Read; break; case PackArchiveMode.Create: fileMode = FileMode.CreateNew; fileAccess = FileAccess.Write; fileShare = FileShare.None; break; case PackArchiveMode.Update: fileMode = FileMode.OpenOrCreate; fileAccess = FileAccess.ReadWrite; fileShare = FileShare.None; break; default: throw new ArgumentOutOfRangeException("mode"); } FileStream fileStream = null; PackArchive result; try { fileStream = File.Open(archiveFileName, fileMode, fileAccess, fileShare); result = new PackArchive(fileStream, mode, false); } catch { if (fileStream != null) { fileStream.Dispose(); } throw; } return(result); }
private void Init(Stream stream, PackArchiveMode mode, bool leaveOpen) { Stream memoryStream = null; try { _backingStream = null; switch (mode) { case PackArchiveMode.Read: if (!stream.CanRead) { throw new ArgumentException(Messages.ReadModeCapabilities); } if (!stream.CanSeek) { _backingStream = stream; stream = (memoryStream = new MemoryStream()); _backingStream.CopyTo(stream); stream.Seek(0L, SeekOrigin.Begin); } break; case PackArchiveMode.Create: if (!stream.CanWrite) { throw new ArgumentException(Messages.CreateModeCapabilities); } break; case PackArchiveMode.Update: throw new ArgumentException(Messages.UpdateModeCapabilities); default: throw new ArgumentOutOfRangeException("mode"); } _mode = mode; _archiveStream = stream; _archiveSize = stream.Length; _archiveReader = (mode == PackArchiveMode.Create) ? null : new BinaryReader(stream); _entries = new List <PackArchiveEntry>(); _entriesCollection = new ReadOnlyCollection <PackArchiveEntry>(_entries); _readEntries = false; _leaveOpen = leaveOpen; _isDisposed = false; switch (mode) { case PackArchiveMode.Read: ReadArchiveFile(); break; case PackArchiveMode.Create: _readEntries = true; break; } } catch { if (memoryStream != null) { memoryStream.Close(); } throw; } }
public PackArchive(Stream stream, PackArchiveMode mode) : this(stream, mode, false) { }