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
- DBDataPermission.cs
- BufferedStream.cs
- ExceptionAggregator.cs
- PropertyDescriptorCollection.cs
- RecognizerInfo.cs
- DelimitedListTraceListener.cs
- JapaneseLunisolarCalendar.cs
- CodeAttributeDeclarationCollection.cs
- UpdateException.cs
- ThicknessConverter.cs
- ListSortDescription.cs
- StringAttributeCollection.cs
- SqlDataSourceRefreshSchemaForm.cs
- WebBrowserNavigatedEventHandler.cs
- CurrentTimeZone.cs
- HostedTransportConfigurationBase.cs
- UnmanagedBitmapWrapper.cs
- MemoryPressure.cs
- FixedStringLookup.cs
- SymbolType.cs
- AccessDataSourceDesigner.cs
- DLinqAssociationProvider.cs
- RichListBox.cs
- SymbolPair.cs
- WebPartEditorApplyVerb.cs
- LinqDataSourceContextData.cs
- AncestorChangedEventArgs.cs
- GZipStream.cs
- HeaderCollection.cs
- SpecularMaterial.cs
- MouseEventArgs.cs
- XmlCDATASection.cs
- SystemIPv4InterfaceProperties.cs
- ScriptResourceDefinition.cs
- XsltInput.cs
- IndexerNameAttribute.cs
- ObjectNotFoundException.cs
- Int32Collection.cs
- SymbolDocumentInfo.cs
- CapiNative.cs
- MultiBindingExpression.cs
- ModelItemDictionary.cs
- LookupBindingPropertiesAttribute.cs
- RequestQueryParser.cs
- HMACSHA512.cs
- WebHttpSecurityElement.cs
- XhtmlBasicTextBoxAdapter.cs
- SafeArrayRankMismatchException.cs
- ReliableSessionBindingElementImporter.cs
- GeneralTransform3DTo2D.cs
- MethodExpr.cs
- ContentWrapperAttribute.cs
- EntityType.cs
- GenericPrincipal.cs
- IItemContainerGenerator.cs
- DataViewListener.cs
- EntityDataSourceColumn.cs
- ProtocolsSection.cs
- DisposableCollectionWrapper.cs
- SchemaImporterExtensionsSection.cs
- WebBrowserHelper.cs
- SoapAttributeAttribute.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- HttpClientCertificate.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- ChangeConflicts.cs
- _ScatterGatherBuffers.cs
- HttpResponseInternalWrapper.cs
- dsa.cs
- HostingEnvironment.cs
- TdsParser.cs
- SvcMapFile.cs
- ImageDrawing.cs
- XmlLanguageConverter.cs
- PerformanceCounterManager.cs
- InternalPermissions.cs
- CallTemplateAction.cs
- BindingExpression.cs
- VirtualPath.cs
- PersonalizationStateInfo.cs
- QuaternionValueSerializer.cs
- XMLSchema.cs
- TypedDataSourceCodeGenerator.cs
- WorkflowRuntimeServiceElementCollection.cs
- ICspAsymmetricAlgorithm.cs
- CodeGenerator.cs
- XmlSchemaAttributeGroupRef.cs
- StylusEventArgs.cs
- ColumnWidthChangingEvent.cs
- CursorConverter.cs
- StatusBarPanelClickEvent.cs
- DocumentPageView.cs
- SpnEndpointIdentity.cs
- InvalidEnumArgumentException.cs
- ReadOnlyPropertyMetadata.cs
- UIServiceHelper.cs
- EventSourceCreationData.cs
- TabControlDesigner.cs
- ConfigXmlReader.cs
- ColumnReorderedEventArgs.cs