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
- CodeSnippetExpression.cs
- DataBinding.cs
- _FtpDataStream.cs
- Parameter.cs
- CodeTypeParameterCollection.cs
- Rect3D.cs
- StandardCommands.cs
- FormatConvertedBitmap.cs
- MissingFieldException.cs
- CellQuery.cs
- XPathNode.cs
- PeerCustomResolverBindingElement.cs
- Canvas.cs
- ParseNumbers.cs
- PointConverter.cs
- InstalledFontCollection.cs
- DetailsViewCommandEventArgs.cs
- ValidationErrorEventArgs.cs
- WebServiceBindingAttribute.cs
- ResizeBehavior.cs
- AVElementHelper.cs
- BitmapFrameDecode.cs
- WebUtil.cs
- CreateUserWizardStep.cs
- IxmlLineInfo.cs
- WebHeaderCollection.cs
- BinaryUtilClasses.cs
- ReversePositionQuery.cs
- SequentialWorkflowRootDesigner.cs
- PointAnimationClockResource.cs
- PropertyHelper.cs
- FrameworkTemplate.cs
- CategoryAttribute.cs
- x509utils.cs
- SequenceDesigner.cs
- Predicate.cs
- Compensation.cs
- AssemblyAttributesGoHere.cs
- PersonalizableTypeEntry.cs
- ChannelServices.cs
- ResourcesGenerator.cs
- SymbolMethod.cs
- TableCell.cs
- SqlRetyper.cs
- BulletedList.cs
- SafeArchiveContext.cs
- SystemIPGlobalProperties.cs
- HashMembershipCondition.cs
- DbUpdateCommandTree.cs
- ActivationServices.cs
- WebResponse.cs
- HotSpotCollectionEditor.cs
- UniqueEventHelper.cs
- SerializationSectionGroup.cs
- TracedNativeMethods.cs
- JsonObjectDataContract.cs
- XPathSingletonIterator.cs
- Int32Rect.cs
- Compiler.cs
- SQLBytesStorage.cs
- UrlRoutingModule.cs
- ModelFunction.cs
- MouseEvent.cs
- Constraint.cs
- OnOperation.cs
- C14NUtil.cs
- diagnosticsswitches.cs
- XmlSerializerVersionAttribute.cs
- PersonalizationState.cs
- OutputWindow.cs
- DataObjectSettingDataEventArgs.cs
- ValidationErrorEventArgs.cs
- SqlNamer.cs
- CqlParser.cs
- WebServiceErrorEvent.cs
- ParameterReplacerVisitor.cs
- GlyphRun.cs
- RC2CryptoServiceProvider.cs
- ResourcePool.cs
- Directory.cs
- SafeCryptContextHandle.cs
- DataControlFieldCollection.cs
- DrawingContextWalker.cs
- StoreAnnotationsMap.cs
- FileStream.cs
- HtmlInputSubmit.cs
- XmlSchemaImport.cs
- Effect.cs
- RichTextBox.cs
- TokenCreationException.cs
- TabControlDesigner.cs
- Utils.cs
- HandlerFactoryWrapper.cs
- ObjectSet.cs
- UnsafePeerToPeerMethods.cs
- documentsequencetextview.cs
- SmiSettersStream.cs
- ComEventsInfo.cs
- AlternationConverter.cs
- TextEditorParagraphs.cs