Esempio n. 1
0
 public PackArchive(Stream stream, PackArchiveMode mode, bool leaveOpen)
 {
     if (stream == null)
     {
         throw new ArgumentNullException("stream");
     }
     Init(stream, mode, leaveOpen);
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
 public PackArchive(Stream stream, PackArchiveMode mode) : this(stream, mode, false)
 {
 }