Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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: [....]: 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
- SegmentInfo.cs
- TextSelection.cs
- DataDocumentXPathNavigator.cs
- CornerRadiusConverter.cs
- QEncodedStream.cs
- SpeechDetectedEventArgs.cs
- FixedTextPointer.cs
- ComponentCommands.cs
- AutoResetEvent.cs
- PageEventArgs.cs
- IteratorFilter.cs
- StylusPointProperty.cs
- ConnectionOrientedTransportManager.cs
- CacheHelper.cs
- ObjectRef.cs
- StringPropertyBuilder.cs
- HandleExceptionArgs.cs
- ControlCodeDomSerializer.cs
- FlowchartStart.xaml.cs
- TextureBrush.cs
- EntityModelSchemaGenerator.cs
- CodeBinaryOperatorExpression.cs
- EngineSite.cs
- ISO2022Encoding.cs
- SimpleHandlerBuildProvider.cs
- Rules.cs
- ServerIdentity.cs
- WindowsTab.cs
- EncoderFallback.cs
- PipelineModuleStepContainer.cs
- X509InitiatorCertificateClientElement.cs
- DataRelationPropertyDescriptor.cs
- DataRowChangeEvent.cs
- WindowsTooltip.cs
- FacetDescription.cs
- ProcessInfo.cs
- CharacterHit.cs
- GeometryHitTestParameters.cs
- ActivityExecutionContext.cs
- ProfileSection.cs
- ExpressionBindingsDialog.cs
- BaseServiceProvider.cs
- MemberInfoSerializationHolder.cs
- StorageMappingItemCollection.cs
- UInt32.cs
- IsolatedStorage.cs
- OracleCommandSet.cs
- GradientSpreadMethodValidation.cs
- ButtonChrome.cs
- BindingManagerDataErrorEventArgs.cs
- AvTrace.cs
- CustomAttributeBuilder.cs
- SendKeys.cs
- dbdatarecord.cs
- sqlstateclientmanager.cs
- CrossSiteScriptingValidation.cs
- PagedDataSource.cs
- SocketElement.cs
- PenContext.cs
- TableLayoutColumnStyleCollection.cs
- DesignerDataTable.cs
- HiddenFieldPageStatePersister.cs
- LogManagementAsyncResult.cs
- ObjRef.cs
- CreateParams.cs
- ServiceThrottle.cs
- WindowsGraphics.cs
- FullTrustAssemblyCollection.cs
- WindowsGraphics2.cs
- StorageMappingItemLoader.cs
- TogglePatternIdentifiers.cs
- Parameter.cs
- TextPattern.cs
- GPPOINT.cs
- xmlfixedPageInfo.cs
- DataGridViewCellCancelEventArgs.cs
- RSAPKCS1KeyExchangeFormatter.cs
- LayoutTableCell.cs
- ItemsControlAutomationPeer.cs
- PolyQuadraticBezierSegment.cs
- ChtmlImageAdapter.cs
- QuotedPrintableStream.cs
- GPPOINTF.cs
- Control.cs
- GridViewCellAutomationPeer.cs
- GroupJoinQueryOperator.cs
- SqlConnectionHelper.cs
- XmlEnumAttribute.cs
- PrivateFontCollection.cs
- PropertyEmitterBase.cs
- SystemBrushes.cs
- ListViewDataItem.cs
- FormsAuthenticationCredentials.cs
- translator.cs
- FrameworkContentElementAutomationPeer.cs
- TypedAsyncResult.cs
- ObjectList.cs
- TextContainerChangedEventArgs.cs
- ArraySubsetEnumerator.cs
- ItemsControl.cs