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
- ClientSettingsSection.cs
- DependencyPropertyKey.cs
- ReceiveSecurityHeaderEntry.cs
- SrgsDocumentParser.cs
- ViewLoader.cs
- HwndSource.cs
- RegexStringValidator.cs
- WindowsPrincipal.cs
- AspCompat.cs
- ClientScriptManager.cs
- HostedHttpRequestAsyncResult.cs
- __Error.cs
- DbException.cs
- KnownTypeAttribute.cs
- XmlnsDefinitionAttribute.cs
- SignedXml.cs
- DodSequenceMerge.cs
- MatrixAnimationUsingKeyFrames.cs
- TableLayoutSettingsTypeConverter.cs
- DependencyPropertyKind.cs
- ManagementEventWatcher.cs
- CollectionViewGroup.cs
- RadialGradientBrush.cs
- XmlILCommand.cs
- HuffModule.cs
- DataSourceBooleanViewSchemaConverter.cs
- ProfileSection.cs
- CharacterHit.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- PrintDocument.cs
- HtmlContainerControl.cs
- ObjectCloneHelper.cs
- SQLCharsStorage.cs
- RSAProtectedConfigurationProvider.cs
- CodeGenerator.cs
- RawStylusInput.cs
- ADConnectionHelper.cs
- QueryExpr.cs
- ParameterEditorUserControl.cs
- WebPartVerbsEventArgs.cs
- FormClosingEvent.cs
- SID.cs
- storepermission.cs
- XmlQualifiedName.cs
- SQLCharsStorage.cs
- ChineseLunisolarCalendar.cs
- BaseCAMarshaler.cs
- MultiPageTextView.cs
- TagPrefixCollection.cs
- EdmProviderManifest.cs
- ProviderMetadata.cs
- BitmapEffectInputData.cs
- WindowsHyperlink.cs
- ListenerBinder.cs
- XmlTextWriter.cs
- GridViewColumn.cs
- TemplateControlParser.cs
- DataTableNewRowEvent.cs
- DSASignatureDeformatter.cs
- StructuredProperty.cs
- Row.cs
- PipeSecurity.cs
- SourceItem.cs
- coordinator.cs
- DoubleLinkListEnumerator.cs
- RecordBuilder.cs
- DelegateBodyWriter.cs
- HtmlHead.cs
- ViewDesigner.cs
- PropertyTabChangedEvent.cs
- ValidatorCollection.cs
- EtwTrace.cs
- UIPermission.cs
- TransformProviderWrapper.cs
- CornerRadius.cs
- TextBox.cs
- DataColumnChangeEvent.cs
- FilterableData.cs
- AssemblyBuilder.cs
- TCPListener.cs
- cookie.cs
- SemanticResolver.cs
- DescendantOverDescendantQuery.cs
- SapiRecognizer.cs
- AnimationTimeline.cs
- OdbcPermission.cs
- TextRange.cs
- WindowsUpDown.cs
- PropertyGridCommands.cs
- TextTreeNode.cs
- BindingManagerDataErrorEventArgs.cs
- TransactionTraceIdentifier.cs
- DefaultTextStoreTextComposition.cs
- DSASignatureFormatter.cs
- GridViewAutomationPeer.cs
- UpdatePanelControlTrigger.cs
- FormViewRow.cs
- recordstatefactory.cs
- HttpProfileGroupBase.cs
- ImageList.cs