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
- DocumentPage.cs
- CodeAccessPermission.cs
- DesignerSerializerAttribute.cs
- RevocationPoint.cs
- StrokeNodeOperations.cs
- RestHandler.cs
- DelegatingTypeDescriptionProvider.cs
- TextEditorCharacters.cs
- MultiSelectRootGridEntry.cs
- CanExecuteRoutedEventArgs.cs
- UnsafeNativeMethods.cs
- ScanQueryOperator.cs
- SqlDataReaderSmi.cs
- XamlPoint3DCollectionSerializer.cs
- GeneralTransform.cs
- ArgumentNullException.cs
- IndividualDeviceConfig.cs
- AnnotationStore.cs
- Context.cs
- DataGridCellEditEndingEventArgs.cs
- DataGridViewRow.cs
- MILUtilities.cs
- SQLGuidStorage.cs
- PolygonHotSpot.cs
- CodeDesigner.cs
- AssemblyInfo.cs
- XmlNamespaceManager.cs
- VerificationException.cs
- CatalogPartCollection.cs
- IpcClientChannel.cs
- DiscoveryDocumentReference.cs
- ProcessModelSection.cs
- ThreadPool.cs
- LocatorPart.cs
- AssemblyCacheEntry.cs
- querybuilder.cs
- SqlConnectionPoolGroupProviderInfo.cs
- CodeSubDirectory.cs
- TempFiles.cs
- ObjectSet.cs
- SByteConverter.cs
- ListViewAutomationPeer.cs
- TaskExtensions.cs
- Model3DGroup.cs
- MenuEventArgs.cs
- X509WindowsSecurityToken.cs
- ClientTarget.cs
- ToolStripMenuItemDesigner.cs
- SessionStateItemCollection.cs
- precedingsibling.cs
- Rules.cs
- CodeSpit.cs
- AsnEncodedData.cs
- SaveFileDialog.cs
- AgileSafeNativeMemoryHandle.cs
- WindowsTreeView.cs
- BrowserDefinition.cs
- MSAAEventDispatcher.cs
- ToolStripGripRenderEventArgs.cs
- ModelItemKeyValuePair.cs
- ContextMenuService.cs
- RtfToXamlLexer.cs
- DesignerView.xaml.cs
- BevelBitmapEffect.cs
- SQLUtility.cs
- WorkflowRuntimeServiceElementCollection.cs
- SessionEndingCancelEventArgs.cs
- DataContractSerializerSection.cs
- HttpCookie.cs
- brushes.cs
- Matrix.cs
- SystemIPInterfaceStatistics.cs
- QueryableDataSource.cs
- MailAddress.cs
- OptimalTextSource.cs
- RenderTargetBitmap.cs
- cache.cs
- ListBoxAutomationPeer.cs
- IODescriptionAttribute.cs
- ProxyWebPart.cs
- HtmlEncodedRawTextWriter.cs
- SafeNativeMethods.cs
- NameValueConfigurationCollection.cs
- TextOnlyOutput.cs
- DataGridParentRows.cs
- WebConfigurationFileMap.cs
- HandleRef.cs
- CachedCompositeFamily.cs
- Invariant.cs
- Pen.cs
- RelativeSource.cs
- ObjectStateManagerMetadata.cs
- ScrollEvent.cs
- unsafeIndexingFilterStream.cs
- CLSCompliantAttribute.cs
- ErrorFormatter.cs
- RolePrincipal.cs
- FixedSOMTable.cs
- ComponentResourceManager.cs
- LinkTarget.cs