Пример #1
0
        public TarArchive(Stream stream, TarArchiveMode mode, StreamAccessMode access, bool leaveOpen)
        {
            this.baseStream  = stream;
            this.ArchiveMode = mode;
            this.AccessMode  = access;
            this.leaveOpen   = leaveOpen;

            if (access == StreamAccessMode.Random)
            {
                if (!stream.CanSeek)
                {
                    throw new StreamAccessException("The given stream does not support random access.");
                }
                else
                {
                    this.RandomAccess = new TarIOBlockManager(this, baseStream);
                }
            }
            else if (access == StreamAccessMode.Sequential)
            {
                SequentialAccess = new TarSequentialCollection(this, stream);
            }
            else
            {
                throw new NotImplementedException("Unknown access type");
            }


            if (mode == TarArchiveMode.Read || mode == TarArchiveMode.Update)
            {
                this.ParseFile();
            }
        }
Пример #2
0
 internal TarIOFileItemStream(long offset, long length, TarIOBlockManager manager)
 {
     this.manager      = manager;
     this.suffixStream = new MemoryStream();
     this.mode         = StreamAccessMode.Random;
     this.fileEntry    = new Pair <long, long>(offset, length);
 }
Пример #3
0
        public EncryptionStream(Stream baseStream, StreamAccessMode accessMode, bool leaveOpen = false)
        {
            if (baseStream == null)
            {
                throw new ArgumentNullException("baseStream");
            }

            switch (accessMode)
            {
            case StreamAccessMode.Read:
                if (!baseStream.CanRead)
                {
                    throw new ArgumentException("baseStream must be readable for accessMode == Read", "baseStream");
                }
                break;

            case StreamAccessMode.Write:
                if (!baseStream.CanWrite)
                {
                    throw new ArgumentException("baseStream must be writable for accessMode == Write", "baseStream");
                }
                break;
            }

            this.baseStream = baseStream;
            this.accessMode = accessMode;
            this.leaveOpen  = leaveOpen;

            this.lcg = new LinearCongruentialGenerator(seed: 0x71C71C71);
        }
Пример #4
0
        public BStream(IBStream streamToWrap, StreamAccessMode mode, int unmanagedBufferSize)
        {
            BaseStream     = streamToWrap;
            SizeableStream = streamToWrap as ISizeableStream;
            _mode          = mode;

            if (unmanagedBufferSize > 0)
            {
                _unmanagedBufferSize = unmanagedBufferSize;
                _unmanagedBuffer     = Marshal.AllocHGlobal(unmanagedBufferSize);
                GC.AddMemoryPressure(unmanagedBufferSize);
            }
        }
Пример #5
0
        public FlacStream(string file, StreamMode mode, StreamAccessMode accessMode)
        {
            FileMode fileMode;
            FileAccess fileAccessMode;

            switch (mode)
            {
                case StreamMode.CreateNew:
                {
                    fileMode = FileMode.Create;
                    break;
                }
                case StreamMode.OpenExisting:
                {
                    fileMode = FileMode.Open;
                    break;
                }
                default:
                {
                    throw new FlacDebugException();
                }
            }

            switch (accessMode)
            {
                case StreamAccessMode.Read:
                case StreamAccessMode.Write:
                case StreamAccessMode.Both:
                {
                    fileAccessMode = (FileAccess)accessMode;
                    break;
                }
                default:
                {
                    throw new FlacDebugException();
                }
            }
            fileStream_ = new FileStream(file, fileMode, fileAccessMode, FileShare.Read);

            if ((accessMode & StreamAccessMode.Read) == StreamAccessMode.Read)
            {
                reader_ = new FlacStreamReader(fileStream_);
            }
            if ((accessMode & StreamAccessMode.Write) == StreamAccessMode.Write)
            {
                writer_ = new FlacStreamWriter(fileStream_);
            }
        }
Пример #6
0
 internal TarIOFileItemStream(long offset, long length, Stream baseStream)
 {
     this.baseStream = baseStream;
     this.mode       = StreamAccessMode.Sequential;
     this.fileEntry  = new Pair <long, long>(offset, length);
 }
Пример #7
0
 public BStream(IBStream streamToWrap, StreamAccessMode mode)
     : this(streamToWrap, mode, 0)
 {
 }