/// <summary> /// Creates a new substream /// </summary> /// <param name="type">The type.</param> /// <returns></returns> public Stream CreateStream(int type) { if ((type < 0) || (type > 0xFFFFFF)) { throw new ArgumentOutOfRangeException("type", type, "Value must be between 0 and 16777216"); } MultipleStreamArgs args = new MultipleStreamArgs(); args.StreamType = type; return(CreateStream(args)); }
/// <summary> /// Creates the stream. /// </summary> /// <param name="args">The args.</param> /// <returns></returns> public Stream CreateStream(MultipleStreamArgs args) { if (_openStream != null) { throw new InvalidOperationException("Only one substream can be open at a time"); } else if (args == null) { throw new ArgumentNullException("args"); } if (_items.Count == _maxCount) { // TODO: Implement end header support throw new InvalidOperationException("Can't create any more substreams"); } MultiStreamItemHeader header = new MultiStreamItemHeader(); header.Offset = BaseStream.Position = BaseStream.Length; header.ItemType = args.StreamType << 4; _updated = true; MultipleSubStreamWriter innerStream = new MultipleSubStreamWriter(this, BaseStream, header); Stream result = innerStream; if (args.Assured) { result = new AssuredSubStream(result, VerificationMode.Full); header.ItemType |= MultiStreamItemHeader.AssuredFlag; } if (args.GZipped) { result = new ZLibSubStream(result, CompressionMode.Compress); header.ItemType |= MultiStreamItemHeader.ZippedFlag; } _openStream = innerStream; return(result); }