Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- LogicalMethodInfo.cs
- RemotingSurrogateSelector.cs
- PersonalizationEntry.cs
- Dump.cs
- RawStylusActions.cs
- DurationConverter.cs
- TypefaceMap.cs
- EllipseGeometry.cs
- FixedTextPointer.cs
- SecurityElement.cs
- DataKeyArray.cs
- VoiceObjectToken.cs
- JournalEntryListConverter.cs
- SeverityFilter.cs
- CheckBox.cs
- SystemNetworkInterface.cs
- WindowsComboBox.cs
- WebPartConnectionCollection.cs
- ScriptReference.cs
- SiteMapDataSourceDesigner.cs
- SslSecurityTokenParameters.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- DataContext.cs
- LinqDataSourceStatusEventArgs.cs
- VoiceObjectToken.cs
- DoubleIndependentAnimationStorage.cs
- AddingNewEventArgs.cs
- BitmapEffectInputData.cs
- SafeEventHandle.cs
- BatchParser.cs
- PlacementWorkspace.cs
- SqlInternalConnectionSmi.cs
- WindowsIdentity.cs
- DiscoveryDocumentSearchPattern.cs
- SqlBuilder.cs
- MarshalByValueComponent.cs
- GeneralTransform3D.cs
- QueryReaderSettings.cs
- BookmarkEventArgs.cs
- HtmlTableCellCollection.cs
- ColorBlend.cs
- AnnotationComponentManager.cs
- ApplicationHost.cs
- GeneralTransform3DGroup.cs
- _CacheStreams.cs
- XmlNodeChangedEventManager.cs
- ContextMenuStrip.cs
- OptimizerPatterns.cs
- EntityRecordInfo.cs
- ResourceKey.cs
- MenuAdapter.cs
- EdmScalarPropertyAttribute.cs
- DeferredReference.cs
- NameValueSectionHandler.cs
- NotSupportedException.cs
- DllNotFoundException.cs
- SizeKeyFrameCollection.cs
- StreamUpgradeAcceptor.cs
- ByteAnimation.cs
- MimeTextImporter.cs
- CompilerCollection.cs
- DayRenderEvent.cs
- DataViewManagerListItemTypeDescriptor.cs
- coordinatorscratchpad.cs
- ExpressionLexer.cs
- DataComponentGenerator.cs
- ExpandCollapsePatternIdentifiers.cs
- HashSetDebugView.cs
- PriorityBindingExpression.cs
- SmtpMail.cs
- CaseInsensitiveComparer.cs
- Itemizer.cs
- assertwrapper.cs
- PassportPrincipal.cs
- ClassHandlersStore.cs
- ToggleButton.cs
- WebServiceClientProxyGenerator.cs
- DataBindingCollection.cs
- StylusPoint.cs
- SqlParameterCollection.cs
- PartialCachingControl.cs
- SafePEFileHandle.cs
- MetadataCache.cs
- IndependentlyAnimatedPropertyMetadata.cs
- _DomainName.cs
- IItemContainerGenerator.cs
- SchemaImporterExtensionElement.cs
- sqlser.cs
- MemberHolder.cs
- SiteMapSection.cs
- LayoutInformation.cs
- TypeConverterHelper.cs
- Sorting.cs
- WebDisplayNameAttribute.cs
- RuntimeIdentifierPropertyAttribute.cs
- AbstractExpressions.cs
- EncodingNLS.cs
- FontFaceLayoutInfo.cs
- TimeSpanValidatorAttribute.cs
- SqlExpander.cs