Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- HwndSubclass.cs
- CallTemplateAction.cs
- PersianCalendar.cs
- Animatable.cs
- TemplateControl.cs
- SqlConnectionStringBuilder.cs
- PropertyInformationCollection.cs
- APCustomTypeDescriptor.cs
- BitArray.cs
- _UriSyntax.cs
- DataGridViewTextBoxColumn.cs
- AxisAngleRotation3D.cs
- WebEventCodes.cs
- UnSafeCharBuffer.cs
- RowCache.cs
- HttpCacheParams.cs
- MouseGestureValueSerializer.cs
- TypeExtensions.cs
- RegistryKey.cs
- Column.cs
- XmlNamespaceMapping.cs
- AssemblyNameProxy.cs
- TransportSecurityBindingElement.cs
- InlinedAggregationOperatorEnumerator.cs
- TagNameToTypeMapper.cs
- DataRowCollection.cs
- FormatConvertedBitmap.cs
- LicFileLicenseProvider.cs
- TextEditorCopyPaste.cs
- TargetParameterCountException.cs
- DatePickerTextBox.cs
- TextFormatterImp.cs
- ClientRoleProvider.cs
- RequestNavigateEventArgs.cs
- PageHandlerFactory.cs
- SingleResultAttribute.cs
- FigureHelper.cs
- ErrorHandler.cs
- TdsParserSessionPool.cs
- DataSetSchema.cs
- CheckableControlBaseAdapter.cs
- ExpressionNormalizer.cs
- Types.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- CodeDomConfigurationHandler.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- ObjectCacheSettings.cs
- AggregateNode.cs
- Bezier.cs
- SafeThemeHandle.cs
- FontNameEditor.cs
- KerberosSecurityTokenProvider.cs
- EntityContainerEmitter.cs
- Gdiplus.cs
- ObjectDisposedException.cs
- ConfigXmlDocument.cs
- PowerStatus.cs
- LayoutTable.cs
- CellParaClient.cs
- GeneralTransform3DTo2D.cs
- itemelement.cs
- DataProviderNameConverter.cs
- PathFigureCollectionValueSerializer.cs
- MailAddressCollection.cs
- CheckBox.cs
- EnglishPluralizationService.cs
- TripleDESCryptoServiceProvider.cs
- Thread.cs
- DispatchWrapper.cs
- coordinatorfactory.cs
- XmlMtomWriter.cs
- ColumnPropertiesGroup.cs
- SettingsAttributes.cs
- SqlError.cs
- ConnectionManagementElement.cs
- TransportContext.cs
- MenuTracker.cs
- ListViewDeleteEventArgs.cs
- EntityDataSourceView.cs
- XmlObjectSerializerContext.cs
- AssemblyName.cs
- HotSpotCollection.cs
- DesignerDataRelationship.cs
- StandardOleMarshalObject.cs
- TdsRecordBufferSetter.cs
- DispatcherHookEventArgs.cs
- DataList.cs
- Drawing.cs
- Mapping.cs
- LinqTreeNodeEvaluator.cs
- Comparer.cs
- StreamAsIStream.cs
- AssertUtility.cs
- ArrayTypeMismatchException.cs
- FontStretch.cs
- BindingEntityInfo.cs
- DocumentPage.cs
- WorkflowServiceBehavior.cs
- AppSettingsExpressionBuilder.cs