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
- ExtensionQuery.cs
- HttpTransportBindingElement.cs
- XmlSerializerFactory.cs
- BaseTemplateBuildProvider.cs
- EndpointAddressMessageFilter.cs
- CodeCatchClauseCollection.cs
- CheckBoxStandardAdapter.cs
- RangeValuePattern.cs
- Button.cs
- URIFormatException.cs
- SystemDiagnosticsSection.cs
- WindowsScrollBar.cs
- ValidationEventArgs.cs
- MsmqIntegrationSecurityMode.cs
- RuleAttributes.cs
- WindowsSlider.cs
- BorderGapMaskConverter.cs
- CustomErrorsSection.cs
- HostingEnvironmentSection.cs
- Timeline.cs
- VisualStyleTypesAndProperties.cs
- ServiceDescriptionSerializer.cs
- EllipticalNodeOperations.cs
- XmlDataDocument.cs
- XamlHostingSectionGroup.cs
- PropertyIDSet.cs
- WindowsFormsLinkLabel.cs
- PassportAuthenticationEventArgs.cs
- ApplicationProxyInternal.cs
- DataBindingHandlerAttribute.cs
- SqlParameterizer.cs
- HeaderCollection.cs
- SHA384Managed.cs
- SmiEventSink_DeferedProcessing.cs
- KeyedHashAlgorithm.cs
- EntityViewContainer.cs
- Dictionary.cs
- FlowDocumentView.cs
- FormatException.cs
- AnchoredBlock.cs
- DiscoveryEndpointValidator.cs
- TraceUtils.cs
- TypeListConverter.cs
- HtmlForm.cs
- DataGridColumnReorderingEventArgs.cs
- IncomingWebRequestContext.cs
- MatrixTransform.cs
- Rect3DConverter.cs
- Rfc2898DeriveBytes.cs
- ClaimComparer.cs
- XMLSyntaxException.cs
- BoundsDrawingContextWalker.cs
- ModuleConfigurationInfo.cs
- MailMessageEventArgs.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- QueryContinueDragEvent.cs
- Cursor.cs
- AbstractDataSvcMapFileLoader.cs
- Exceptions.cs
- XmlAttribute.cs
- EmbeddedMailObjectsCollection.cs
- DrawingAttributes.cs
- LinqDataSourceView.cs
- ConfigurationManager.cs
- DataGridViewTextBoxCell.cs
- _SslState.cs
- PageStatePersister.cs
- ZipIOFileItemStream.cs
- ClientSideQueueItem.cs
- SqlRecordBuffer.cs
- selecteditemcollection.cs
- CardSpaceException.cs
- MessageSmuggler.cs
- BinaryObjectWriter.cs
- ActionFrame.cs
- DataServiceRequestOfT.cs
- XamlSerializationHelper.cs
- WebControlAdapter.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- DiscoveryMessageSequence.cs
- DrawingServices.cs
- ServiceThrottlingBehavior.cs
- ArithmeticException.cs
- MaterialGroup.cs
- storagemappingitemcollection.viewdictionary.cs
- RecognizerBase.cs
- TextEffectResolver.cs
- CodeMethodInvokeExpression.cs
- FontDifferentiator.cs
- XmlSchemaSimpleContentRestriction.cs
- FactoryGenerator.cs
- EnumBuilder.cs
- DynamicPropertyHolder.cs
- ConfigXmlCDataSection.cs
- WorkflowExecutor.cs
- WebEvents.cs
- DateTimeParse.cs
- Interlocked.cs
- TargetParameterCountException.cs
- DoubleStorage.cs