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
- SerializationHelper.cs
- _NativeSSPI.cs
- InputLanguageEventArgs.cs
- XmlSchemaSequence.cs
- ResXResourceSet.cs
- SqlCacheDependencySection.cs
- SqlUDTStorage.cs
- BlockingCollection.cs
- Normalization.cs
- assertwrapper.cs
- StrokeNodeOperations.cs
- ProgressBarRenderer.cs
- TimerTable.cs
- ConstraintManager.cs
- DataGridColumnHeadersPresenterAutomationPeer.cs
- ChildTable.cs
- CustomCategoryAttribute.cs
- HwndSubclass.cs
- WindowsFormsSynchronizationContext.cs
- XPathMultyIterator.cs
- Int64AnimationBase.cs
- ChangePasswordDesigner.cs
- Debugger.cs
- DependencyObject.cs
- Graphics.cs
- TextFragmentEngine.cs
- ObjectSpanRewriter.cs
- MarkupObject.cs
- AutomationElement.cs
- HttpResponse.cs
- AttributeInfo.cs
- Style.cs
- BaseProcessor.cs
- shaperfactoryquerycacheentry.cs
- DataGridViewTextBoxCell.cs
- StrokeIntersection.cs
- CngProperty.cs
- HtmlAnchor.cs
- SkipStoryboardToFill.cs
- DataMisalignedException.cs
- Stacktrace.cs
- ConfigurationPermission.cs
- WebProxyScriptElement.cs
- StateItem.cs
- HtmlInputReset.cs
- HwndMouseInputProvider.cs
- Certificate.cs
- BinarySerializer.cs
- GenerateTemporaryAssemblyTask.cs
- DesignerAdapterAttribute.cs
- Padding.cs
- AxWrapperGen.cs
- Util.cs
- EncryptedType.cs
- XmlEntity.cs
- WebPartAuthorizationEventArgs.cs
- TimeStampChecker.cs
- MemoryFailPoint.cs
- HeaderedItemsControl.cs
- IgnoreSectionHandler.cs
- XmlLanguage.cs
- OpacityConverter.cs
- VectorCollection.cs
- DataGridViewDataConnection.cs
- InsufficientMemoryException.cs
- TypeNameConverter.cs
- HttpCachePolicy.cs
- HtmlTableCellCollection.cs
- RayHitTestParameters.cs
- WindowsClientElement.cs
- CodeTypeParameterCollection.cs
- DataService.cs
- ServiceBusyException.cs
- dataobject.cs
- RequiredFieldValidator.cs
- ConfigurationValue.cs
- UrlPropertyAttribute.cs
- AccessControlEntry.cs
- DesignTableCollection.cs
- _DigestClient.cs
- CollectionCodeDomSerializer.cs
- ObjectDataSourceFilteringEventArgs.cs
- RegexRunner.cs
- CommandManager.cs
- BitmapEffectInputData.cs
- COAUTHINFO.cs
- ConfigurationManagerInternal.cs
- DashStyles.cs
- XmlNodeChangedEventArgs.cs
- InstanceView.cs
- GridItemCollection.cs
- BrowserCapabilitiesCompiler.cs
- UnsignedPublishLicense.cs
- IncrementalHitTester.cs
- ExistsInCollection.cs
- RTLAwareMessageBox.cs
- ConnectionManagementSection.cs
- Part.cs
- TextBoxBase.cs
- TableLayoutCellPaintEventArgs.cs