Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- SharedConnectionListener.cs
- DrawToolTipEventArgs.cs
- WinCategoryAttribute.cs
- PromptStyle.cs
- RelationshipSet.cs
- CodeParameterDeclarationExpression.cs
- GcHandle.cs
- SqlOuterApplyReducer.cs
- AsymmetricKeyExchangeFormatter.cs
- XmlLoader.cs
- SkinBuilder.cs
- Style.cs
- PaperSize.cs
- BindingElement.cs
- BitmapEffectInputData.cs
- SqlDependencyUtils.cs
- EncoderBestFitFallback.cs
- HelloMessageApril2005.cs
- MenuItem.cs
- DSASignatureFormatter.cs
- HttpPostLocalhostServerProtocol.cs
- GatewayIPAddressInformationCollection.cs
- XMLUtil.cs
- FacetChecker.cs
- RevocationPoint.cs
- DbDataAdapter.cs
- CodeCommentStatement.cs
- XPathNodeHelper.cs
- PackWebRequest.cs
- BezierSegment.cs
- SchemaTableOptionalColumn.cs
- RuleInfoComparer.cs
- MessageSmuggler.cs
- Context.cs
- ArrayList.cs
- MsdtcWrapper.cs
- BaseParagraph.cs
- ImageDrawing.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- SafeNativeMethods.cs
- KeySpline.cs
- HandlerBase.cs
- Converter.cs
- FrugalList.cs
- ChooseAction.cs
- DockAndAnchorLayout.cs
- HttpHandlersSection.cs
- Vector3DAnimation.cs
- StylusShape.cs
- BitmapEffectInput.cs
- HMACSHA512.cs
- SecurityTraceRecordHelper.cs
- MSAAEventDispatcher.cs
- RootBuilder.cs
- PolygonHotSpot.cs
- Error.cs
- DataSourceXmlSubItemAttribute.cs
- HandledEventArgs.cs
- ChildrenQuery.cs
- SyndicationDeserializer.cs
- DataGridViewRowCancelEventArgs.cs
- RetrieveVirtualItemEventArgs.cs
- FormsAuthenticationEventArgs.cs
- SqlConnectionStringBuilder.cs
- ModifierKeysConverter.cs
- FontSourceCollection.cs
- Rectangle.cs
- ErrorsHelper.cs
- Select.cs
- SrgsElementList.cs
- PropertyGridCommands.cs
- MinMaxParagraphWidth.cs
- MimeAnyImporter.cs
- AutomationTextAttribute.cs
- ToolboxItemFilterAttribute.cs
- PriorityChain.cs
- HwndTarget.cs
- CodeBlockBuilder.cs
- EncoderBestFitFallback.cs
- XmlToDatasetMap.cs
- MonitoringDescriptionAttribute.cs
- EnumMemberAttribute.cs
- Point3D.cs
- MessageDecoder.cs
- MimeBasePart.cs
- AppDomainAttributes.cs
- Compilation.cs
- DynamicValidator.cs
- GridViewDeletedEventArgs.cs
- HttpPostedFile.cs
- PrinterUnitConvert.cs
- ApplicationSettingsBase.cs
- StopStoryboard.cs
- DetailsViewCommandEventArgs.cs
- PageAsyncTaskManager.cs
- LogAppendAsyncResult.cs
- GeneralTransform3DTo2D.cs
- DataGridViewAdvancedBorderStyle.cs
- DataGridRelationshipRow.cs
- ScanQueryOperator.cs