Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SqlCacheDependencyDatabase.cs
- FormViewDeleteEventArgs.cs
- TimeStampChecker.cs
- WindowsAuthenticationEventArgs.cs
- ThreadExceptionEvent.cs
- LinearKeyFrames.cs
- ScrollBarRenderer.cs
- EntityDataSourceContextCreatedEventArgs.cs
- ConfigurationFileMap.cs
- UnicodeEncoding.cs
- TransformPattern.cs
- PageBreakRecord.cs
- CompilerScopeManager.cs
- Interfaces.cs
- QuaternionAnimation.cs
- ProfilePropertyNameValidator.cs
- LogWriteRestartAreaAsyncResult.cs
- MethodCallConverter.cs
- DataStreamFromComStream.cs
- UMPAttributes.cs
- FormViewPagerRow.cs
- InputEventArgs.cs
- MetadataArtifactLoaderCompositeResource.cs
- ExpressionEditorSheet.cs
- SqlXml.cs
- PackUriHelper.cs
- SecurityContext.cs
- SiteMapSection.cs
- SplashScreenNativeMethods.cs
- TreeWalkHelper.cs
- Vector3DCollection.cs
- CompoundFileStreamReference.cs
- loginstatus.cs
- TextEditorContextMenu.cs
- DBConnectionString.cs
- DynamicRendererThreadManager.cs
- InvokeMethodActivityDesigner.cs
- NotImplementedException.cs
- ValidationError.cs
- _HelperAsyncResults.cs
- PageThemeCodeDomTreeGenerator.cs
- DBPropSet.cs
- PageAsyncTask.cs
- CodeTypeDelegate.cs
- SQLBinaryStorage.cs
- PersonalizationStateInfoCollection.cs
- GridToolTip.cs
- SystemFonts.cs
- QueryContinueDragEventArgs.cs
- ObjectSpanRewriter.cs
- TransformerInfoCollection.cs
- MatrixCamera.cs
- AttributeProviderAttribute.cs
- Part.cs
- GenerateTemporaryTargetAssembly.cs
- MaterialGroup.cs
- PartManifestEntry.cs
- SubclassTypeValidatorAttribute.cs
- DBSchemaTable.cs
- Main.cs
- CompensationParticipant.cs
- XmlDocumentFieldSchema.cs
- XXXOnTypeBuilderInstantiation.cs
- WebConfigurationManager.cs
- ColorTranslator.cs
- DecoderExceptionFallback.cs
- Int32RectValueSerializer.cs
- ServiceDescriptionImporter.cs
- ZipIOCentralDirectoryFileHeader.cs
- HtmlToClrEventProxy.cs
- WmfPlaceableFileHeader.cs
- HtmlPhoneCallAdapter.cs
- ProxyWebPartManager.cs
- BreakRecordTable.cs
- DecoratedNameAttribute.cs
- GeneratedCodeAttribute.cs
- TemplateBindingExtension.cs
- Token.cs
- FileLogRecordStream.cs
- LockedBorderGlyph.cs
- SQLDateTime.cs
- SiteMapHierarchicalDataSourceView.cs
- HtmlInputPassword.cs
- XPathBuilder.cs
- TypeNameParser.cs
- WebServiceBindingAttribute.cs
- SqlEnums.cs
- WebConfigurationHostFileChange.cs
- Psha1DerivedKeyGeneratorHelper.cs
- Listen.cs
- ConfigurationSection.cs
- DataGridView.cs
- HwndKeyboardInputProvider.cs
- ProfileEventArgs.cs
- VectorAnimationBase.cs
- SourceItem.cs
- PointValueSerializer.cs
- XmlDataSourceView.cs
- XmlCodeExporter.cs
- LinearKeyFrames.cs