Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- StickyNoteAnnotations.cs
- RealProxy.cs
- TypeInitializationException.cs
- DictionaryBase.cs
- MouseActionValueSerializer.cs
- SafePEFileHandle.cs
- WebPartConnectionsCancelEventArgs.cs
- wpf-etw.cs
- XmlSecureResolver.cs
- EntityPropertyMappingAttribute.cs
- ModelUIElement3D.cs
- UITypeEditors.cs
- XPathQilFactory.cs
- PcmConverter.cs
- ArrayConverter.cs
- SqlMethods.cs
- RolePrincipal.cs
- AssemblyBuilder.cs
- FileUpload.cs
- Canvas.cs
- ComboBoxItem.cs
- PublisherMembershipCondition.cs
- EnumerationRangeValidationUtil.cs
- XmlCompatibilityReader.cs
- DesignerCatalogPartChrome.cs
- AssemblyBuilderData.cs
- SafeNativeMethods.cs
- TextEditorContextMenu.cs
- COSERVERINFO.cs
- RawStylusInputCustomData.cs
- CommandConverter.cs
- OrderablePartitioner.cs
- XmlUrlResolver.cs
- ContractReference.cs
- EntityWithKeyStrategy.cs
- DataSourceXmlClassAttribute.cs
- ItemList.cs
- TransactedReceiveData.cs
- ScrollEventArgs.cs
- SqlGenerator.cs
- ToolStripLabel.cs
- EncodingInfo.cs
- HybridDictionary.cs
- Single.cs
- LinqDataSourceDeleteEventArgs.cs
- TypeElementCollection.cs
- DesignerCategoryAttribute.cs
- HashHelpers.cs
- GeneralTransform3D.cs
- DocumentOrderQuery.cs
- LassoSelectionBehavior.cs
- WizardSideBarListControlItemEventArgs.cs
- TextServicesCompartmentEventSink.cs
- ChangeDirector.cs
- RegexBoyerMoore.cs
- CqlLexer.cs
- ArrayEditor.cs
- UserControl.cs
- HtmlInputHidden.cs
- DropShadowEffect.cs
- UInt16Storage.cs
- AutomationPeer.cs
- EmptyReadOnlyDictionaryInternal.cs
- PointLight.cs
- PointCollectionConverter.cs
- MenuItem.cs
- QilXmlReader.cs
- CommonGetThemePartSize.cs
- ProofTokenCryptoHandle.cs
- SizeKeyFrameCollection.cs
- CommunicationException.cs
- CharAnimationBase.cs
- ShortcutKeysEditor.cs
- AssemblyBuilder.cs
- SignedPkcs7.cs
- XPathDocumentIterator.cs
- QueryExpression.cs
- Padding.cs
- MemberMemberBinding.cs
- UmAlQuraCalendar.cs
- NamedElement.cs
- DataSvcMapFile.cs
- ConfigsHelper.cs
- RayMeshGeometry3DHitTestResult.cs
- PolyLineSegment.cs
- SQLSingle.cs
- CompilerLocalReference.cs
- ValidationErrorInfo.cs
- SmiXetterAccessMap.cs
- RemoteX509Token.cs
- WebHttpSecurity.cs
- ExtendedProperty.cs
- HMACSHA384.cs
- PlainXmlDeserializer.cs
- FileSystemWatcher.cs
- RegistryDataKey.cs
- DbException.cs
- DrawingContext.cs
- Run.cs
- ListArgumentProvider.cs