Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Base / MS / Internal / IO / Zip / WriteTimeStream.cs / 1 / WriteTimeStream.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // WriteTimeStream - wraps the ArchiveStream in Streaming generation scenarios so that we // can determine current archive stream offset even when working on a stream that is non-seekable // because the Position property is unusable on such streams. // // History: // 03/25/2002: BruceMac: Created. // //----------------------------------------------------------------------------- using System; using System.IO; using System.Windows; namespace MS.Internal.IO.Zip { internal class WriteTimeStream : Stream { //----------------------------------------------------- // // Public Properties // //----------------------------------------------------- ////// CanRead - never /// override public bool CanRead { get { return false; } } ////// CanSeek - never /// override public bool CanSeek{ get { return false; } } ////// CanWrite - only if we are not disposed /// override public bool CanWrite { get { return (_baseStream != null); } } ////// Same as Position /// override public long Length { get { CheckDisposed(); return _position; } } ////// Get is supported even on Write-only stream /// override public long Position { get { CheckDisposed(); return _position; } set { CheckDisposed(); IllegalAccess(); // throw exception } } //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- public override void SetLength(long newLength) { IllegalAccess(); // throw exception } override public long Seek(long offset, SeekOrigin origin) { IllegalAccess(); // throw exception return -1; // keep compiler happy } override public int Read(byte[] buffer, int offset, int count) { IllegalAccess(); // throw exception return -1; // keep compiler happy } override public void Write(byte[] buffer, int offset, int count) { CheckDisposed(); _baseStream.Write(buffer, offset, count); checked{_position += count;} } override public void Flush() { CheckDisposed(); _baseStream.Flush(); } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ internal WriteTimeStream(Stream baseStream) { if (baseStream == null) { throw new ArgumentNullException("baseStream"); } _baseStream = baseStream; // must be based on writable stream if (!_baseStream.CanWrite) throw new ArgumentException(SR.Get(SRID.WriteNotSupported), "baseStream"); } //----------------------------------------------------- // // Protected Methods // //------------------------------------------------------ protected override void Dispose(bool disposing) { try { if (disposing && (_baseStream != null)) { _baseStream.Close(); } } finally { _baseStream = null; base.Dispose(disposing); } } //----------------------------------------------------- // // Private Methods // //----------------------------------------------------- private static void IllegalAccess() { throw new NotSupportedException(SR.Get(SRID.WriteOnlyStream)); } private void CheckDisposed() { if (_baseStream == null) throw new ObjectDisposedException("Stream"); } // _baseStream doubles as our disposed indicator - it's null if we are disposed private Stream _baseStream; // stream we wrap - needs to only support Write private long _position; // current position } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // WriteTimeStream - wraps the ArchiveStream in Streaming generation scenarios so that we // can determine current archive stream offset even when working on a stream that is non-seekable // because the Position property is unusable on such streams. // // History: // 03/25/2002: BruceMac: Created. // //----------------------------------------------------------------------------- using System; using System.IO; using System.Windows; namespace MS.Internal.IO.Zip { internal class WriteTimeStream : Stream { //----------------------------------------------------- // // Public Properties // //----------------------------------------------------- ////// CanRead - never /// override public bool CanRead { get { return false; } } ////// CanSeek - never /// override public bool CanSeek{ get { return false; } } ////// CanWrite - only if we are not disposed /// override public bool CanWrite { get { return (_baseStream != null); } } ////// Same as Position /// override public long Length { get { CheckDisposed(); return _position; } } ////// Get is supported even on Write-only stream /// override public long Position { get { CheckDisposed(); return _position; } set { CheckDisposed(); IllegalAccess(); // throw exception } } //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- public override void SetLength(long newLength) { IllegalAccess(); // throw exception } override public long Seek(long offset, SeekOrigin origin) { IllegalAccess(); // throw exception return -1; // keep compiler happy } override public int Read(byte[] buffer, int offset, int count) { IllegalAccess(); // throw exception return -1; // keep compiler happy } override public void Write(byte[] buffer, int offset, int count) { CheckDisposed(); _baseStream.Write(buffer, offset, count); checked{_position += count;} } override public void Flush() { CheckDisposed(); _baseStream.Flush(); } //------------------------------------------------------ // // Internal Methods // //------------------------------------------------------ internal WriteTimeStream(Stream baseStream) { if (baseStream == null) { throw new ArgumentNullException("baseStream"); } _baseStream = baseStream; // must be based on writable stream if (!_baseStream.CanWrite) throw new ArgumentException(SR.Get(SRID.WriteNotSupported), "baseStream"); } //----------------------------------------------------- // // Protected Methods // //------------------------------------------------------ protected override void Dispose(bool disposing) { try { if (disposing && (_baseStream != null)) { _baseStream.Close(); } } finally { _baseStream = null; base.Dispose(disposing); } } //----------------------------------------------------- // // Private Methods // //----------------------------------------------------- private static void IllegalAccess() { throw new NotSupportedException(SR.Get(SRID.WriteOnlyStream)); } private void CheckDisposed() { if (_baseStream == null) throw new ObjectDisposedException("Stream"); } // _baseStream doubles as our disposed indicator - it's null if we are disposed private Stream _baseStream; // stream we wrap - needs to only support Write private long _position; // current position } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RemotingConfigParser.cs
- RuntimeVariablesExpression.cs
- XmlExceptionHelper.cs
- HashLookup.cs
- AdornerPresentationContext.cs
- StdValidatorsAndConverters.cs
- WebDisplayNameAttribute.cs
- WebControlsSection.cs
- DataControlFieldCell.cs
- SizeF.cs
- WebPartRestoreVerb.cs
- ClientConvert.cs
- XmlILOptimizerVisitor.cs
- ClientRolePrincipal.cs
- SvcMapFile.cs
- RelatedEnd.cs
- PageRanges.cs
- GenericTextProperties.cs
- HtmlTableRow.cs
- XmlSchemaComplexContentRestriction.cs
- InfiniteTimeSpanConverter.cs
- NodeFunctions.cs
- StorageComplexTypeMapping.cs
- InputLangChangeEvent.cs
- OleDbSchemaGuid.cs
- SessionStateContainer.cs
- ToolBarButtonClickEvent.cs
- CompressedStack.cs
- PkcsMisc.cs
- LineServices.cs
- TableLayoutPanel.cs
- MouseEventArgs.cs
- CustomErrorsSectionWrapper.cs
- SystemIPInterfaceStatistics.cs
- SHA1Managed.cs
- DecodeHelper.cs
- RetrieveVirtualItemEventArgs.cs
- Label.cs
- SemanticResolver.cs
- DesignerAdapterAttribute.cs
- ClockController.cs
- SplitterPanel.cs
- JoinQueryOperator.cs
- RuntimeConfigurationRecord.cs
- MainMenu.cs
- ContactManager.cs
- HitTestParameters3D.cs
- XmlLoader.cs
- LoginUtil.cs
- TextInfo.cs
- DataServiceResponse.cs
- HTTP_SERVICE_CONFIG_URLACL_KEY.cs
- FrameworkElement.cs
- Slider.cs
- DataViewManagerListItemTypeDescriptor.cs
- SqlInternalConnection.cs
- arc.cs
- AdornedElementPlaceholder.cs
- MenuItem.cs
- BaseParser.cs
- NumberSubstitution.cs
- XmlSchemaInferenceException.cs
- Substitution.cs
- OpCodes.cs
- ControlPaint.cs
- ProcessInputEventArgs.cs
- EastAsianLunisolarCalendar.cs
- AttributeUsageAttribute.cs
- SrgsNameValueTag.cs
- FixedTextPointer.cs
- XpsManager.cs
- XmlNotation.cs
- SqlXml.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- Validator.cs
- TextElement.cs
- BooleanAnimationUsingKeyFrames.cs
- WorkflowRuntime.cs
- DoubleLinkList.cs
- SystemResources.cs
- QilTargetType.cs
- KeyValueInternalCollection.cs
- XmlNamespaceDeclarationsAttribute.cs
- OwnerDrawPropertyBag.cs
- PnrpPeerResolver.cs
- DesignerVerbCollection.cs
- EntityViewGenerationAttribute.cs
- DefaultBindingPropertyAttribute.cs
- SqlGenericUtil.cs
- XmlQuerySequence.cs
- WebPartTransformer.cs
- AppDomainShutdownMonitor.cs
- RSAOAEPKeyExchangeFormatter.cs
- WindowsPrincipal.cs
- SmtpAuthenticationManager.cs
- SqlDataSource.cs
- ICollection.cs
- SubstitutionResponseElement.cs
- DataBindingExpressionBuilder.cs
- FileDialogCustomPlacesCollection.cs