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
- Pkcs7Signer.cs
- DefaultAssemblyResolver.cs
- GcHandle.cs
- CodeCompileUnit.cs
- XhtmlBasicLabelAdapter.cs
- DefaultCommandConverter.cs
- StyleBamlTreeBuilder.cs
- FunctionImportMapping.cs
- X509AudioLogo.cs
- MetadataPropertyvalue.cs
- SynchronizationContext.cs
- ServerType.cs
- PathGeometry.cs
- ImmutableCollection.cs
- ModuleBuilder.cs
- WpfPayload.cs
- UndirectedGraph.cs
- DynamicMetaObjectBinder.cs
- CacheMode.cs
- TdsValueSetter.cs
- Hex.cs
- ListViewAutomationPeer.cs
- ModelTreeManager.cs
- AccessedThroughPropertyAttribute.cs
- SqlConnectionPoolProviderInfo.cs
- ChangeTracker.cs
- EntityDataSourceSelectedEventArgs.cs
- PenLineCapValidation.cs
- SqlInternalConnection.cs
- RowUpdatingEventArgs.cs
- MatrixTransform.cs
- HtmlTitle.cs
- SearchForVirtualItemEventArgs.cs
- ValueProviderWrapper.cs
- DataGridViewCellValidatingEventArgs.cs
- ParamArrayAttribute.cs
- PerfCounters.cs
- DynamicDocumentPaginator.cs
- _CookieModule.cs
- XmlWriterDelegator.cs
- DataGridViewRowEventArgs.cs
- SecurityValidationBehavior.cs
- RecordBuilder.cs
- GridViewCancelEditEventArgs.cs
- ReverseQueryOperator.cs
- PagerStyle.cs
- VectorCollection.cs
- ModelUIElement3D.cs
- ProbeDuplexAsyncResult.cs
- XmlChildNodes.cs
- FormParameter.cs
- AudioException.cs
- IsolatedStorage.cs
- VectorAnimation.cs
- DbParameterCollection.cs
- PeerHopCountAttribute.cs
- DateTimeFormatInfo.cs
- WebScriptMetadataMessage.cs
- TableAutomationPeer.cs
- LoginCancelEventArgs.cs
- ActiveDocumentEvent.cs
- WebPartMenuStyle.cs
- FileRegion.cs
- WorkflowQueue.cs
- Pointer.cs
- PackageStore.cs
- ControlCachePolicy.cs
- OLEDB_Enum.cs
- GraphicsPath.cs
- TextBounds.cs
- SoapMessage.cs
- XmlSchemaObjectCollection.cs
- ResourceExpressionEditorSheet.cs
- MSG.cs
- StylusCaptureWithinProperty.cs
- SelectorItemAutomationPeer.cs
- DataRelationCollection.cs
- SafeFileMapViewHandle.cs
- PeerCollaborationPermission.cs
- XmlSchemaAppInfo.cs
- WebPartEditVerb.cs
- ToolStripDropDownMenu.cs
- HttpListener.cs
- SystemParameters.cs
- RightsManagementUser.cs
- XmlSignatureProperties.cs
- OperationDescriptionCollection.cs
- DataGridViewCellEventArgs.cs
- EventSinkHelperWriter.cs
- ColumnMapProcessor.cs
- DocumentApplication.cs
- HttpModuleCollection.cs
- Transform.cs
- CharacterMetrics.cs
- XsltContext.cs
- FontFamilyConverter.cs
- ItemCheckedEvent.cs
- OdbcEnvironment.cs
- DocumentSequenceHighlightLayer.cs
- InnerItemCollectionView.cs