Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- Source.cs
- RemotingAttributes.cs
- SoapExtensionReflector.cs
- SafeLibraryHandle.cs
- ControlBindingsCollection.cs
- ChangeNode.cs
- HashSetEqualityComparer.cs
- GPRECTF.cs
- LifetimeServices.cs
- XmlSchemaInclude.cs
- AtlasWeb.Designer.cs
- RuntimeHandles.cs
- XmlIncludeAttribute.cs
- TabletCollection.cs
- DbParameterCollectionHelper.cs
- ReaderOutput.cs
- HitTestDrawingContextWalker.cs
- Query.cs
- SequenceFullException.cs
- CollectionView.cs
- MarkerProperties.cs
- ObjectIDGenerator.cs
- TransactionInformation.cs
- DockPattern.cs
- PropertyDescriptorCollection.cs
- BinaryOperationBinder.cs
- DataGridViewCheckBoxCell.cs
- FileChangeNotifier.cs
- FontConverter.cs
- SafeEventLogReadHandle.cs
- InvalidAsynchronousStateException.cs
- DataGridViewBand.cs
- ResourceWriter.cs
- Query.cs
- TypeUsageBuilder.cs
- DataControlFieldHeaderCell.cs
- Empty.cs
- ContainerFilterService.cs
- NetworkCredential.cs
- StateItem.cs
- KeyInfo.cs
- Switch.cs
- ModelItemKeyValuePair.cs
- ProjectedWrapper.cs
- InvalidWMPVersionException.cs
- ToolStripOverflowButton.cs
- DataGridHelper.cs
- LogAppendAsyncResult.cs
- View.cs
- StringUtil.cs
- WebPartConnectionsConfigureVerb.cs
- WebServiceParameterData.cs
- EnvironmentPermission.cs
- RTLAwareMessageBox.cs
- SemanticKeyElement.cs
- BooleanAnimationBase.cs
- PeerName.cs
- TextFormatterHost.cs
- ColumnHeaderConverter.cs
- AnimationStorage.cs
- TransformedBitmap.cs
- CommonObjectSecurity.cs
- PointHitTestParameters.cs
- IIS7WorkerRequest.cs
- newinstructionaction.cs
- StringSorter.cs
- RoleBoolean.cs
- HashCodeCombiner.cs
- LayoutEditorPart.cs
- WebBrowserContainer.cs
- GPPOINTF.cs
- ChangeNode.cs
- MessageFilterException.cs
- CngKeyBlobFormat.cs
- XmlDomTextWriter.cs
- InternalResources.cs
- LogSwitch.cs
- PolygonHotSpot.cs
- GenericTypeParameterBuilder.cs
- XmlTextReaderImplHelpers.cs
- ResourceExpressionBuilder.cs
- JapaneseCalendar.cs
- PointF.cs
- SerializationInfo.cs
- FixedDSBuilder.cs
- GcHandle.cs
- HwndAppCommandInputProvider.cs
- HebrewCalendar.cs
- InvalidWMPVersionException.cs
- ObjectViewListener.cs
- MailMessage.cs
- PageFunction.cs
- RelationshipDetailsCollection.cs
- FileIOPermission.cs
- DataTableMapping.cs
- UIInitializationException.cs
- COM2EnumConverter.cs
- DesignerSerializerAttribute.cs
- GridViewRowPresenterBase.cs
- IDQuery.cs