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
- PowerStatus.cs
- FileSystemEventArgs.cs
- SamlConditions.cs
- VirtualizedItemPattern.cs
- Comparer.cs
- DistributedTransactionPermission.cs
- ErrorStyle.cs
- CallId.cs
- DoubleConverter.cs
- DrawingBrush.cs
- BitmapMetadataBlob.cs
- SubstitutionResponseElement.cs
- SqlDataAdapter.cs
- OneOfScalarConst.cs
- SiteMapSection.cs
- Models.cs
- ImageAutomationPeer.cs
- ManagementEventArgs.cs
- ThreadStartException.cs
- ProfileManager.cs
- StorageSetMapping.cs
- Decorator.cs
- RegexRunnerFactory.cs
- EntityContainerEntitySetDefiningQuery.cs
- HostingEnvironmentException.cs
- BamlReader.cs
- AsyncOperationManager.cs
- EmbeddedMailObjectsCollection.cs
- SiteMapProvider.cs
- SystemBrushes.cs
- TemplatePartAttribute.cs
- SingleAnimation.cs
- SyndicationSerializer.cs
- localization.cs
- WebPartConnectionsEventArgs.cs
- DataGridViewSortCompareEventArgs.cs
- InvalidFilterCriteriaException.cs
- ListControlBoundActionList.cs
- JsonServiceDocumentSerializer.cs
- Parameter.cs
- MetadataPropertyCollection.cs
- SoapProtocolReflector.cs
- ColumnClickEvent.cs
- RealizedColumnsBlock.cs
- FixedSOMSemanticBox.cs
- DelayedRegex.cs
- _BaseOverlappedAsyncResult.cs
- Win32NamedPipes.cs
- MatrixCamera.cs
- _CommandStream.cs
- ServicePointManagerElement.cs
- ObjectNavigationPropertyMapping.cs
- SdlChannelSink.cs
- BatchParser.cs
- ControlBindingsCollection.cs
- ManagementEventWatcher.cs
- SBCSCodePageEncoding.cs
- CheckoutException.cs
- WorkflowQueue.cs
- ProgressBarHighlightConverter.cs
- CompensatableTransactionScopeActivity.cs
- DetailsViewAutoFormat.cs
- SpecialFolderEnumConverter.cs
- Propagator.JoinPropagator.cs
- EventMappingSettings.cs
- WpfKnownTypeInvoker.cs
- AliasGenerator.cs
- SortedDictionary.cs
- unsafenativemethodstextservices.cs
- WrapPanel.cs
- Context.cs
- PrintingPermission.cs
- ReceiveSecurityHeaderElementManager.cs
- BuildProvider.cs
- TraceContext.cs
- XmlAttribute.cs
- DESCryptoServiceProvider.cs
- ApplicationCommands.cs
- XDeferredAxisSource.cs
- MatrixStack.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- GlobalId.cs
- GeometryDrawing.cs
- PrintDocument.cs
- HttpListenerContext.cs
- HostingEnvironmentException.cs
- AutomationPropertyInfo.cs
- CustomLineCap.cs
- TraceSwitch.cs
- Site.cs
- ToolStripPanelRow.cs
- HostingEnvironment.cs
- XmlStreamStore.cs
- TrackBar.cs
- StrongTypingException.cs
- EntityReference.cs
- BackStopAuthenticationModule.cs
- WpfPayload.cs
- ISAPIWorkerRequest.cs
- ParallelTimeline.cs