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
- TargetConverter.cs
- ClientEventManager.cs
- XmlUtf8RawTextWriter.cs
- WindowsSolidBrush.cs
- SubqueryRules.cs
- Transform3DCollection.cs
- SourceLineInfo.cs
- AnnotationResourceCollection.cs
- ScriptBehaviorDescriptor.cs
- MetadataArtifactLoaderFile.cs
- CancelAsyncOperationRequest.cs
- XmlSignatureManifest.cs
- WebSysDefaultValueAttribute.cs
- connectionpool.cs
- OdbcConnection.cs
- HierarchicalDataBoundControlAdapter.cs
- AccessibilityHelperForXpWin2k3.cs
- MenuItem.cs
- FixedSOMImage.cs
- Selection.cs
- DetailsView.cs
- PersonalizationEntry.cs
- CheckBox.cs
- ChtmlSelectionListAdapter.cs
- IsolationInterop.cs
- IriParsingElement.cs
- OdbcError.cs
- MetadataPropertyCollection.cs
- StreamHelper.cs
- InputQueue.cs
- PropertyMap.cs
- SQLInt32Storage.cs
- SqlBulkCopyColumnMapping.cs
- ExclusiveTcpTransportManager.cs
- XmlEncodedRawTextWriter.cs
- SqlUserDefinedAggregateAttribute.cs
- UserInitiatedNavigationPermission.cs
- NamespaceQuery.cs
- UnconditionalPolicy.cs
- SmiContext.cs
- TemplateBindingExtension.cs
- LayoutEditorPart.cs
- EventManager.cs
- RtfToXamlLexer.cs
- SinglePageViewer.cs
- ToolBarDesigner.cs
- IntSecurity.cs
- GeometryHitTestParameters.cs
- DataGridViewCellStyleChangedEventArgs.cs
- ContactManager.cs
- ClientBuildManagerCallback.cs
- ConnectionPointGlyph.cs
- DataBindEngine.cs
- ReachFixedDocumentSerializerAsync.cs
- PermissionAttributes.cs
- WindowsListViewItemStartMenu.cs
- BuildResult.cs
- XmlDataSource.cs
- DataGridTablesFactory.cs
- PropertyPathConverter.cs
- MergeLocalizationDirectives.cs
- BaseProcessor.cs
- ServiceProviders.cs
- XmlRootAttribute.cs
- XmlWriterTraceListener.cs
- DesignerWidgets.cs
- TextPatternIdentifiers.cs
- RuntimeConfig.cs
- AuthenticationConfig.cs
- UIElementParagraph.cs
- DataGridColumnCollection.cs
- PassportAuthentication.cs
- ImageAutomationPeer.cs
- COM2PropertyBuilderUITypeEditor.cs
- ExeConfigurationFileMap.cs
- SubMenuStyle.cs
- PropertyGridView.cs
- COM2PropertyDescriptor.cs
- PackageFilter.cs
- BaseCollection.cs
- TracingConnectionListener.cs
- ImmComposition.cs
- AsyncOperation.cs
- ClientTargetSection.cs
- WorkflowServiceHost.cs
- ProtocolsConfiguration.cs
- XhtmlBasicTextViewAdapter.cs
- EntityDesignerUtils.cs
- AttachmentService.cs
- IDictionary.cs
- ExceptionRoutedEventArgs.cs
- WindowsAuthenticationEventArgs.cs
- NullableFloatMinMaxAggregationOperator.cs
- ConfigurationValidatorAttribute.cs
- EdmItemCollection.cs
- __FastResourceComparer.cs
- SQLMoneyStorage.cs
- RuleSetDialog.cs
- Message.cs
- ScriptingJsonSerializationSection.cs