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
- ByteStreamMessage.cs
- CollectionViewSource.cs
- Rect3DValueSerializer.cs
- BasicCellRelation.cs
- AuthenticationConfig.cs
- SystemWebCachingSectionGroup.cs
- PeerCollaborationPermission.cs
- Size3DConverter.cs
- ContentDisposition.cs
- HandlerMappingMemo.cs
- TransformValueSerializer.cs
- DbBuffer.cs
- EmptyCollection.cs
- DynamicRenderer.cs
- DbConnectionPoolCounters.cs
- CodeCatchClauseCollection.cs
- HTMLTagNameToTypeMapper.cs
- OdbcDataReader.cs
- PersistChildrenAttribute.cs
- XmlDataSourceNodeDescriptor.cs
- FormViewPageEventArgs.cs
- UnhandledExceptionEventArgs.cs
- MethodBuilder.cs
- ProviderConnectionPoint.cs
- _ConnectOverlappedAsyncResult.cs
- CommentEmitter.cs
- TextRenderer.cs
- PropertyItemInternal.cs
- exports.cs
- Hex.cs
- WeakReferenceKey.cs
- cache.cs
- PngBitmapEncoder.cs
- FilterUserControlBase.cs
- SortQuery.cs
- ExtendedProtectionPolicy.cs
- XmlHierarchicalEnumerable.cs
- AddInAttribute.cs
- RevocationPoint.cs
- ServiceXNameTypeConverter.cs
- X509AsymmetricSecurityKey.cs
- HostingEnvironment.cs
- ThreadWorkerController.cs
- HttpCacheVary.cs
- XPathBinder.cs
- RegexRunner.cs
- ImpersonationContext.cs
- SqlRemoveConstantOrderBy.cs
- precedingsibling.cs
- _SSPISessionCache.cs
- XmlCharacterData.cs
- CustomError.cs
- TypeSystem.cs
- DeleteIndexBinder.cs
- documentation.cs
- RegexCapture.cs
- BitmapCodecInfo.cs
- CustomPopupPlacement.cs
- BamlRecordHelper.cs
- SymbolUsageManager.cs
- MouseBinding.cs
- UrlPropertyAttribute.cs
- ElementAction.cs
- CompilationUnit.cs
- Polygon.cs
- EntitySetBaseCollection.cs
- TextDecorations.cs
- ConnectionInterfaceCollection.cs
- GridViewHeaderRowPresenter.cs
- ArrangedElementCollection.cs
- DataGridViewCheckBoxColumn.cs
- SqlClientFactory.cs
- FixedDSBuilder.cs
- RIPEMD160.cs
- DataView.cs
- SourceFileInfo.cs
- IdentityValidationException.cs
- NumericExpr.cs
- ExclusiveTcpListener.cs
- MobileControlsSectionHandler.cs
- UpdateManifestForBrowserApplication.cs
- SpotLight.cs
- AnalyzedTree.cs
- PhysicalAddress.cs
- _FixedSizeReader.cs
- AdCreatedEventArgs.cs
- MouseDevice.cs
- ExpressionTextBox.xaml.cs
- XmlTypeMapping.cs
- TransactionChannel.cs
- AsyncResult.cs
- DataControlFieldHeaderCell.cs
- CatalogPartChrome.cs
- EntryWrittenEventArgs.cs
- InvokePatternIdentifiers.cs
- SamlConstants.cs
- MissingManifestResourceException.cs
- ToolStripDropDownClosedEventArgs.cs
- PassportAuthenticationModule.cs
- Animatable.cs