Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- EditorPartChrome.cs
- Directory.cs
- XamlSerializerUtil.cs
- FormatterServices.cs
- GeneralTransformGroup.cs
- RenderTargetBitmap.cs
- HashHelper.cs
- UidManager.cs
- CodeDirectiveCollection.cs
- LinearQuaternionKeyFrame.cs
- WebFormDesignerActionService.cs
- Size.cs
- FixedSOMContainer.cs
- basenumberconverter.cs
- ComponentChangingEvent.cs
- OrthographicCamera.cs
- CacheEntry.cs
- UserUseLicenseDictionaryLoader.cs
- RenamedEventArgs.cs
- DBCSCodePageEncoding.cs
- ObjectList.cs
- MenuItemStyleCollectionEditor.cs
- returneventsaver.cs
- ReadOnlyObservableCollection.cs
- SqlFactory.cs
- LoginCancelEventArgs.cs
- NoResizeHandleGlyph.cs
- ReadOnlyDictionary.cs
- Form.cs
- Property.cs
- PositiveTimeSpanValidatorAttribute.cs
- DelegatingConfigHost.cs
- Selector.cs
- SettingsSection.cs
- SingleAnimationBase.cs
- PassportIdentity.cs
- InvokeBinder.cs
- NumericPagerField.cs
- AsymmetricKeyExchangeDeformatter.cs
- Stopwatch.cs
- TraceShell.cs
- RegexCompiler.cs
- DefaultMemberAttribute.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- SqlReorderer.cs
- BitmapEffectInputConnector.cs
- BodyWriter.cs
- IgnoreSectionHandler.cs
- ConfigurationSectionGroupCollection.cs
- BindingEntityInfo.cs
- HuffModule.cs
- AbstractSvcMapFileLoader.cs
- AutomationPeer.cs
- ResumeStoryboard.cs
- Visual3D.cs
- AdapterUtil.cs
- UnionQueryOperator.cs
- DispatcherSynchronizationContext.cs
- ImageUrlEditor.cs
- __ComObject.cs
- FileBasedResourceGroveler.cs
- newitemfactory.cs
- Privilege.cs
- DateTimeParse.cs
- TrackingMemoryStream.cs
- CompilerLocalReference.cs
- FilterableAttribute.cs
- IndentTextWriter.cs
- XmlDictionaryReaderQuotas.cs
- DBDataPermission.cs
- ResponseBodyWriter.cs
- InputScopeNameConverter.cs
- PackagePart.cs
- HttpHeaderCollection.cs
- DATA_BLOB.cs
- RemoteWebConfigurationHostServer.cs
- RadialGradientBrush.cs
- CheckBoxField.cs
- IIS7WorkerRequest.cs
- EntityParameterCollection.cs
- MessageAction.cs
- Control.cs
- MinimizableAttributeTypeConverter.cs
- MessageHeaderT.cs
- XmlDocumentSchema.cs
- Compiler.cs
- _SSPISessionCache.cs
- TraceHelpers.cs
- BinaryCommonClasses.cs
- NestedContainer.cs
- ActionFrame.cs
- SerialErrors.cs
- ObjectViewEntityCollectionData.cs
- SecurityUtils.cs
- BitmapPalette.cs
- ControlAdapter.cs
- TraceInternal.cs
- UserInitiatedNavigationPermission.cs
- CompilerScopeManager.cs
- EntityDataSourceViewSchema.cs