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
- _Events.cs
- WriterOutput.cs
- InsufficientExecutionStackException.cs
- MSAANativeProvider.cs
- CommentAction.cs
- XmlSchemaDatatype.cs
- CaretElement.cs
- RuleAttributes.cs
- SaveRecipientRequest.cs
- TimeoutValidationAttribute.cs
- HttpDictionary.cs
- EncryptedPackage.cs
- DataSvcMapFileSerializer.cs
- DocumentViewerConstants.cs
- DynamicActivityTypeDescriptor.cs
- CqlErrorHelper.cs
- QuinticEase.cs
- CompiledXpathExpr.cs
- AppDomainAttributes.cs
- StateFinalizationActivity.cs
- HiddenField.cs
- XmlJsonWriter.cs
- DataGridViewTextBoxColumn.cs
- IgnoreFlushAndCloseStream.cs
- SecurityHelper.cs
- ToggleProviderWrapper.cs
- MenuCommandService.cs
- ListView.cs
- PreProcessor.cs
- Point4DConverter.cs
- QilValidationVisitor.cs
- AnimatedTypeHelpers.cs
- ListBoxAutomationPeer.cs
- CodeAttributeArgument.cs
- CharacterBuffer.cs
- FilteredReadOnlyMetadataCollection.cs
- EntityDataSourceSelectedEventArgs.cs
- PolicyDesigner.cs
- VectorKeyFrameCollection.cs
- Path.cs
- TextDocumentView.cs
- JoinCqlBlock.cs
- SafeNativeMethods.cs
- CroppedBitmap.cs
- RectangleF.cs
- Base64Decoder.cs
- MetadataUtilsSmi.cs
- AjaxFrameworkAssemblyAttribute.cs
- ForeignKeyFactory.cs
- AstTree.cs
- HwndSourceParameters.cs
- RuntimeResourceSet.cs
- ModelTypeConverter.cs
- QueueProcessor.cs
- BindingFormattingDialog.cs
- XmlIgnoreAttribute.cs
- ReflectionTypeLoadException.cs
- BitmapSourceSafeMILHandle.cs
- FormViewCommandEventArgs.cs
- DbBuffer.cs
- nulltextnavigator.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- MinMaxParagraphWidth.cs
- ZipIOExtraField.cs
- WmlObjectListAdapter.cs
- SByteStorage.cs
- CompositeControl.cs
- StatusBarItem.cs
- TablePattern.cs
- ScrollPattern.cs
- DataSourceHelper.cs
- OSFeature.cs
- QueryExtender.cs
- BehaviorEditorPart.cs
- CompModHelpers.cs
- Point3DCollectionValueSerializer.cs
- UInt64Storage.cs
- TreeNodeStyle.cs
- TreeSet.cs
- Span.cs
- SelectedDatesCollection.cs
- EdmFunctions.cs
- UpdateExpressionVisitor.cs
- TraceListeners.cs
- TextEditorCharacters.cs
- RichTextBoxAutomationPeer.cs
- CapabilitiesState.cs
- DocumentStatusResources.cs
- AttachedAnnotation.cs
- GcHandle.cs
- CatalogZone.cs
- QueryCursorEventArgs.cs
- XmlUTF8TextWriter.cs
- OleDbSchemaGuid.cs
- SystemResourceHost.cs
- ViewGenResults.cs
- BitStream.cs
- DefaultPropertyAttribute.cs
- CodeAttachEventStatement.cs
- NavigatingCancelEventArgs.cs