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
- HtmlInputPassword.cs
- PrintDialog.cs
- LinqDataSourceInsertEventArgs.cs
- SessionStateSection.cs
- SequenceDesignerAccessibleObject.cs
- TreeNodeStyle.cs
- ValidationRuleCollection.cs
- XmlCountingReader.cs
- NavigationWindow.cs
- CodeIterationStatement.cs
- PathHelper.cs
- SetterBaseCollection.cs
- ConfigurationManagerHelper.cs
- ToolboxItemFilterAttribute.cs
- HelpKeywordAttribute.cs
- ContractsBCL.cs
- HtmlTableRowCollection.cs
- Model3D.cs
- WindowsSysHeader.cs
- OSFeature.cs
- Application.cs
- CodeTypeReference.cs
- CalendarButton.cs
- WebBrowserDocumentCompletedEventHandler.cs
- OracleTimeSpan.cs
- GridViewRowPresenter.cs
- Menu.cs
- CompModSwitches.cs
- XamlSerializerUtil.cs
- DataGridCellsPanel.cs
- MessageSmuggler.cs
- sqlinternaltransaction.cs
- DateTimeUtil.cs
- XmlFormatExtensionPrefixAttribute.cs
- CommandConverter.cs
- ListViewItem.cs
- DataControlFieldHeaderCell.cs
- Vertex.cs
- MatrixAnimationUsingPath.cs
- BindStream.cs
- graph.cs
- SimpleBitVector32.cs
- BuildManagerHost.cs
- TextWriter.cs
- BufferedGraphics.cs
- PrePostDescendentsWalker.cs
- ConversionContext.cs
- PermissionRequestEvidence.cs
- TraceXPathNavigator.cs
- ToolStripSeparatorRenderEventArgs.cs
- TreeNodeBinding.cs
- PersistChildrenAttribute.cs
- SqlUdtInfo.cs
- PostBackOptions.cs
- StyleSheetRefUrlEditor.cs
- MemberMaps.cs
- CompilerGeneratedAttribute.cs
- DocumentCollection.cs
- httpserverutility.cs
- PagesSection.cs
- RepeaterCommandEventArgs.cs
- RegexRunnerFactory.cs
- RulePatternOps.cs
- HostingEnvironmentSection.cs
- PageContent.cs
- FormsAuthenticationModule.cs
- EpmSyndicationContentSerializer.cs
- XamlSerializer.cs
- Rijndael.cs
- XamlVector3DCollectionSerializer.cs
- ColumnResizeUndoUnit.cs
- PixelFormats.cs
- OptimalBreakSession.cs
- RestHandlerFactory.cs
- FixedSOMImage.cs
- PseudoWebRequest.cs
- recordstatescratchpad.cs
- OutputCacheSection.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- XmlExceptionHelper.cs
- XmlUnspecifiedAttribute.cs
- XmlSchemaIdentityConstraint.cs
- FrameAutomationPeer.cs
- CommandExpr.cs
- ObjectDataProvider.cs
- XmlNavigatorFilter.cs
- NavigationHelper.cs
- DoubleMinMaxAggregationOperator.cs
- SafeArchiveContext.cs
- ExpressionBuilderCollection.cs
- SQLCharsStorage.cs
- AlphaSortedEnumConverter.cs
- ColorKeyFrameCollection.cs
- GridLength.cs
- DataGridParentRows.cs
- DesignerOptions.cs
- ActivityBuilder.cs
- ConnectionConsumerAttribute.cs
- OdbcDataAdapter.cs
- AVElementHelper.cs