Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / IO / Zip / WriteTimeStream.cs / 1305600 / 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; using MS.Internal.WindowsBase; 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; using MS.Internal.WindowsBase; 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
- FixedSOMGroup.cs
- HwndAppCommandInputProvider.cs
- DataGridViewLayoutData.cs
- ItemContainerProviderWrapper.cs
- ProcessInfo.cs
- PersonalizationAdministration.cs
- TrackingProfileDeserializationException.cs
- GestureRecognitionResult.cs
- EditBehavior.cs
- PerfCounters.cs
- TextEncodedRawTextWriter.cs
- Classification.cs
- HtmlTableCellCollection.cs
- CommonDialog.cs
- XmlSchemaAll.cs
- ProfileSettings.cs
- ComponentDispatcher.cs
- GroupByExpressionRewriter.cs
- State.cs
- UnmanagedHandle.cs
- VectorValueSerializer.cs
- ValidationSummary.cs
- ActiveXContainer.cs
- ListViewCommandEventArgs.cs
- OleDbMetaDataFactory.cs
- ContentWrapperAttribute.cs
- ServiceInstanceProvider.cs
- EntityContainer.cs
- DisplayInformation.cs
- BitmapEffectDrawing.cs
- TerminatorSinks.cs
- SafeNativeMethods.cs
- WeakEventTable.cs
- ImportedPolicyConversionContext.cs
- FixedFindEngine.cs
- AsyncDataRequest.cs
- TileBrush.cs
- GeneralTransform3DTo2DTo3D.cs
- SystemWebExtensionsSectionGroup.cs
- RoutedEvent.cs
- ToolStripItemClickedEventArgs.cs
- ReferencedAssembly.cs
- HierarchicalDataBoundControlAdapter.cs
- WindowsScrollBar.cs
- Propagator.Evaluator.cs
- PropertyEntry.cs
- TraceInternal.cs
- WrappedOptions.cs
- regiisutil.cs
- MessageQueue.cs
- DoubleCollectionValueSerializer.cs
- IisTraceWebEventProvider.cs
- CompiledRegexRunnerFactory.cs
- panel.cs
- ServiceDescription.cs
- AdCreatedEventArgs.cs
- DesignerValidatorAdapter.cs
- UserControlCodeDomTreeGenerator.cs
- WebControl.cs
- InputBuffer.cs
- ProfilePropertySettings.cs
- SqlNotificationRequest.cs
- FixedSOMPageElement.cs
- ProtectedProviderSettings.cs
- CfgArc.cs
- OdbcConnectionOpen.cs
- HtmlWindowCollection.cs
- DataGridViewTopLeftHeaderCell.cs
- EncryptedReference.cs
- ApplicationDirectory.cs
- RepeaterItem.cs
- SQLBytesStorage.cs
- AdornedElementPlaceholder.cs
- DefaultProxySection.cs
- PinnedBufferMemoryStream.cs
- SHA512CryptoServiceProvider.cs
- ExtensionSurface.cs
- NGCPageContentSerializerAsync.cs
- AssociationTypeEmitter.cs
- AnalyzedTree.cs
- CollectionViewGroup.cs
- GridViewSelectEventArgs.cs
- GenericIdentity.cs
- ProxyHwnd.cs
- WebHttpBindingElement.cs
- AliasedSlot.cs
- Certificate.cs
- DataGridPageChangedEventArgs.cs
- FileEnumerator.cs
- TablePattern.cs
- FileEnumerator.cs
- Rect.cs
- WebReferencesBuildProvider.cs
- BitStack.cs
- ScriptControlDescriptor.cs
- CodeParameterDeclarationExpression.cs
- SqlDataSourceCache.cs
- ToolStripRenderEventArgs.cs
- FloaterParaClient.cs
- MaskedTextBoxTextEditorDropDown.cs