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
- RegistryPermission.cs
- EntitySqlQueryState.cs
- SspiHelper.cs
- AppDomainAttributes.cs
- TraceContextEventArgs.cs
- DataGridLinkButton.cs
- ConfigXmlAttribute.cs
- XmlWriterTraceListener.cs
- PageBreakRecord.cs
- EncryptedXml.cs
- ContractDescription.cs
- MemoryRecordBuffer.cs
- TextServicesCompartment.cs
- ComNativeDescriptor.cs
- StylusPointPropertyInfoDefaults.cs
- IsolatedStorageException.cs
- CacheEntry.cs
- RtfControlWordInfo.cs
- UrlUtility.cs
- DataControlFieldHeaderCell.cs
- OptionalMessageQuery.cs
- StackSpiller.Bindings.cs
- RequiredFieldValidator.cs
- Triplet.cs
- QilExpression.cs
- CollectionExtensions.cs
- PointLight.cs
- QilFunction.cs
- InternalRelationshipCollection.cs
- OrthographicCamera.cs
- XmlAtomicValue.cs
- HttpCacheVaryByContentEncodings.cs
- Int64.cs
- GacUtil.cs
- ApplicationFileParser.cs
- SoapTypeAttribute.cs
- DataGridItemCollection.cs
- BinaryMessageEncodingBindingElement.cs
- ErrorsHelper.cs
- NameTable.cs
- Lasso.cs
- RequiredAttributeAttribute.cs
- GestureRecognizer.cs
- AppDomain.cs
- InkSerializer.cs
- TemplatedWizardStep.cs
- SequenceDesigner.xaml.cs
- XmlWellformedWriter.cs
- LinkedList.cs
- ListMarkerLine.cs
- DodSequenceMerge.cs
- DetailsViewModeEventArgs.cs
- XmlConvert.cs
- SqlMultiplexer.cs
- EditorPart.cs
- PowerStatus.cs
- FileVersionInfo.cs
- HandoffBehavior.cs
- RootBrowserWindowAutomationPeer.cs
- PropertyDescriptor.cs
- BookmarkList.cs
- PixelFormatConverter.cs
- DataGridViewCellValueEventArgs.cs
- XDeferredAxisSource.cs
- LambdaCompiler.Binary.cs
- XamlDebuggerXmlReader.cs
- SocketAddress.cs
- CommonXSendMessage.cs
- ProcessModelSection.cs
- OracleException.cs
- DbConnectionStringBuilder.cs
- SchemaEntity.cs
- InternalBufferOverflowException.cs
- PreProcessor.cs
- ZipArchive.cs
- ColumnResult.cs
- XmlSerializerVersionAttribute.cs
- FilterElement.cs
- CodeTypeReference.cs
- Mappings.cs
- HttpValueCollection.cs
- FixUpCollection.cs
- GeneralTransformGroup.cs
- XmlReaderSettings.cs
- ProfileSettingsCollection.cs
- BooleanKeyFrameCollection.cs
- GetUserPreferenceRequest.cs
- DataGridViewCellLinkedList.cs
- MonthCalendarDesigner.cs
- StructuralType.cs
- ClientCredentialsElement.cs
- FileDialog_Vista_Interop.cs
- WCFModelStrings.Designer.cs
- LinqDataSourceInsertEventArgs.cs
- StyleBamlTreeBuilder.cs
- CompositeTypefaceMetrics.cs
- ObjectDataSourceChooseMethodsPanel.cs
- MarkupProperty.cs
- PictureBox.cs
- LambdaCompiler.Expressions.cs