Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / IO / Zip / WriteTimeStream.cs / 1305600 / 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; using MS.Internal.WindowsBase; 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; using MS.Internal.WindowsBase; 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
- TaiwanLunisolarCalendar.cs
- ImmutableAssemblyCacheEntry.cs
- WebPartConnectionsCancelVerb.cs
- LazyTextWriterCreator.cs
- PerfCounters.cs
- MethodBuilder.cs
- UnauthorizedWebPart.cs
- SqlWebEventProvider.cs
- FixUp.cs
- HttpCookiesSection.cs
- Lasso.cs
- DeploymentExceptionMapper.cs
- MediaPlayer.cs
- ContentPosition.cs
- PathBox.cs
- RoutedEventHandlerInfo.cs
- PageContentCollection.cs
- RealProxy.cs
- BufferedReadStream.cs
- RectangleGeometry.cs
- HtmlTableRowCollection.cs
- ClientSideProviderDescription.cs
- ResourceBinder.cs
- HtmlTableCell.cs
- UnauthorizedWebPart.cs
- TemplatedWizardStep.cs
- ScriptServiceAttribute.cs
- TrueReadOnlyCollection.cs
- WhitespaceRuleReader.cs
- BaseTemplateBuildProvider.cs
- WpfKnownTypeInvoker.cs
- XmlUrlResolver.cs
- XPathNavigatorException.cs
- Debug.cs
- WindowsFormsHelpers.cs
- GridViewCancelEditEventArgs.cs
- PaperSource.cs
- RightsManagementPermission.cs
- DataGridState.cs
- cache.cs
- ServiceOperation.cs
- ScriptModule.cs
- StreamResourceInfo.cs
- MetadataSerializer.cs
- RuleSettingsCollection.cs
- CharAnimationUsingKeyFrames.cs
- WriteStateInfoBase.cs
- ValidateNames.cs
- DependencyObjectProvider.cs
- ControlPager.cs
- Container.cs
- _AuthenticationState.cs
- SimpleColumnProvider.cs
- PreviewPageInfo.cs
- BinarySerializer.cs
- TextSelection.cs
- InitializeCorrelation.cs
- IOException.cs
- RSACryptoServiceProvider.cs
- XmlQualifiedNameTest.cs
- FormParameter.cs
- WebReferencesBuildProvider.cs
- NavigationWindowAutomationPeer.cs
- ComboBoxItem.cs
- StyleCollectionEditor.cs
- ServiceRoute.cs
- WebControl.cs
- ComponentChangedEvent.cs
- StdValidatorsAndConverters.cs
- CursorEditor.cs
- Message.cs
- AttributeCollection.cs
- KeyValuePairs.cs
- PostBackOptions.cs
- VisualStyleTypesAndProperties.cs
- HtmlHead.cs
- FlowDocumentPage.cs
- PropertyReferenceSerializer.cs
- CatalogPartCollection.cs
- Fx.cs
- TableLayoutStyle.cs
- TemplateParser.cs
- ToolbarAUtomationPeer.cs
- ServiceSecurityContext.cs
- WmpBitmapDecoder.cs
- ConnectionManager.cs
- LineUtil.cs
- BooleanStorage.cs
- AssemblyHash.cs
- SqlCacheDependency.cs
- ArcSegment.cs
- DataGridHeaderBorder.cs
- OverflowException.cs
- DecoderNLS.cs
- EUCJPEncoding.cs
- BamlTreeMap.cs
- OracleRowUpdatingEventArgs.cs
- ISFTagAndGuidCache.cs
- ArgIterator.cs
- RequestQueryParser.cs