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
- RelationshipSet.cs
- DocumentPropertiesDialog.cs
- ObjectSet.cs
- CompositionAdorner.cs
- Part.cs
- SiteMapNodeItemEventArgs.cs
- ProjectionRewriter.cs
- FileChangesMonitor.cs
- EmissiveMaterial.cs
- ApplyImportsAction.cs
- RemotingException.cs
- DescriptionAttribute.cs
- WindowsIPAddress.cs
- ConfigurationManager.cs
- StatusStrip.cs
- DesignerExtenders.cs
- ToolBar.cs
- SchemaTableColumn.cs
- DefinitionUpdate.cs
- ProcessModuleCollection.cs
- ConsoleCancelEventArgs.cs
- XmlElementAttribute.cs
- ToolStripSplitStackLayout.cs
- EventLogTraceListener.cs
- WindowsFormsSynchronizationContext.cs
- SoapBinding.cs
- MULTI_QI.cs
- ActivityDesigner.cs
- ByteStack.cs
- RuntimeEnvironment.cs
- COM2ExtendedTypeConverter.cs
- DocumentSequence.cs
- ToolboxItemFilterAttribute.cs
- ProxyGenerationError.cs
- ChannelSinkStacks.cs
- GridErrorDlg.cs
- AnimationStorage.cs
- FusionWrap.cs
- HttpInputStream.cs
- InvokeHandlers.cs
- PropertyMappingExceptionEventArgs.cs
- StickyNoteContentControl.cs
- ShaderEffect.cs
- VisualStyleInformation.cs
- HostedElements.cs
- RTTypeWrapper.cs
- PointIndependentAnimationStorage.cs
- XPathDocumentIterator.cs
- NameTable.cs
- TextCharacters.cs
- CodeTypeParameter.cs
- ParameterToken.cs
- FlowchartDesigner.xaml.cs
- RadialGradientBrush.cs
- WSSecureConversation.cs
- SpellerInterop.cs
- RowUpdatedEventArgs.cs
- Line.cs
- ArgIterator.cs
- DeferredElementTreeState.cs
- MappingModelBuildProvider.cs
- TaskCanceledException.cs
- CustomCredentialPolicy.cs
- StatusBarPanelClickEvent.cs
- SymmetricSecurityBindingElement.cs
- JpegBitmapEncoder.cs
- WebPartConnectionsConnectVerb.cs
- HtmlInputButton.cs
- ScriptingJsonSerializationSection.cs
- DetailsViewUpdatedEventArgs.cs
- dataprotectionpermissionattribute.cs
- GridViewEditEventArgs.cs
- Point4DConverter.cs
- TransactionTable.cs
- ProjectionQueryOptionExpression.cs
- XXXInfos.cs
- ToolStripDropDownClosedEventArgs.cs
- SafeBitVector32.cs
- PropertyEmitter.cs
- ContextStaticAttribute.cs
- TemplateControlCodeDomTreeGenerator.cs
- SignatureDescription.cs
- OptimalBreakSession.cs
- FileDetails.cs
- Int64.cs
- Latin1Encoding.cs
- errorpatternmatcher.cs
- InkCollectionBehavior.cs
- CombinedGeometry.cs
- XPathEmptyIterator.cs
- GenericEnumerator.cs
- ClassicBorderDecorator.cs
- TimersDescriptionAttribute.cs
- TreeView.cs
- CodeValidator.cs
- DetailsViewInsertedEventArgs.cs
- TypedServiceChannelBuilder.cs
- EqualityComparer.cs
- OracleConnectionStringBuilder.cs
- EraserBehavior.cs