Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HwndHostAutomationPeer.cs
- Grant.cs
- XmlSchemaAnnotation.cs
- FontStyleConverter.cs
- XmlSchemaChoice.cs
- HttpWriter.cs
- HyperLinkField.cs
- WebFormsRootDesigner.cs
- TextAction.cs
- BoolLiteral.cs
- ImageAutomationPeer.cs
- SafeCoTaskMem.cs
- PeerOutputChannel.cs
- DayRenderEvent.cs
- BindingOperations.cs
- WebProxyScriptElement.cs
- SessionEndingEventArgs.cs
- UnmanagedMarshal.cs
- ContainerControl.cs
- GridEntry.cs
- CodeIdentifier.cs
- DataSetMappper.cs
- Soap12ProtocolImporter.cs
- DataGridTableCollection.cs
- IsolationInterop.cs
- TextElementEnumerator.cs
- RenderData.cs
- SeekStoryboard.cs
- ModuleBuilderData.cs
- Padding.cs
- CDSsyncETWBCLProvider.cs
- ReflectTypeDescriptionProvider.cs
- TemplateBindingExpressionConverter.cs
- Convert.cs
- DataTableNewRowEvent.cs
- NativeMethods.cs
- GlyphRun.cs
- __Filters.cs
- DbModificationClause.cs
- BoundPropertyEntry.cs
- ExpressionBuilder.cs
- RequestStatusBarUpdateEventArgs.cs
- SplashScreenNativeMethods.cs
- TransactionInterop.cs
- PasswordBox.cs
- TemplateFactory.cs
- ScrollEvent.cs
- StyleCollection.cs
- WebPartsSection.cs
- MenuCommandsChangedEventArgs.cs
- MenuItemAutomationPeer.cs
- FontFamilyValueSerializer.cs
- TextOutput.cs
- MenuEventArgs.cs
- DirtyTextRange.cs
- FormsAuthentication.cs
- RbTree.cs
- ClickablePoint.cs
- ButtonAutomationPeer.cs
- ListItemsCollectionEditor.cs
- ProcessProtocolHandler.cs
- SqlInfoMessageEvent.cs
- TextHidden.cs
- BasicHttpBinding.cs
- AddValidationError.cs
- TraceFilter.cs
- Timeline.cs
- StreamUpdate.cs
- Rotation3D.cs
- RewritingValidator.cs
- HttpPostedFile.cs
- SimpleFileLog.cs
- Int16.cs
- XmlSchemaAppInfo.cs
- RawAppCommandInputReport.cs
- WriteFileContext.cs
- HashAlgorithm.cs
- RepeaterItemEventArgs.cs
- List.cs
- EditorPartCollection.cs
- RelatedCurrencyManager.cs
- XamlStyleSerializer.cs
- WebPartDescriptionCollection.cs
- EventManager.cs
- CodeIdentifiers.cs
- _HelperAsyncResults.cs
- DetailsViewUpdatedEventArgs.cs
- ChtmlImageAdapter.cs
- AmbiguousMatchException.cs
- TreeBuilder.cs
- ContainerControlDesigner.cs
- _NestedSingleAsyncResult.cs
- Point3DConverter.cs
- PageRanges.cs
- Point.cs
- AnnotationHelper.cs
- ListItemParagraph.cs
- Control.cs
- Vector3DCollection.cs
- EventManager.cs