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
- ControlDesigner.cs
- FontWeightConverter.cs
- RunClient.cs
- FtpWebRequest.cs
- ComponentResourceKey.cs
- BreakRecordTable.cs
- UnitySerializationHolder.cs
- ConnectionPoolManager.cs
- SspiSecurityToken.cs
- SpecularMaterial.cs
- ListViewAutomationPeer.cs
- RecommendedAsConfigurableAttribute.cs
- SourceElementsCollection.cs
- ListControlDataBindingHandler.cs
- TableHeaderCell.cs
- PerformanceCounterManager.cs
- TabRenderer.cs
- DrawingAttributesDefaultValueFactory.cs
- DoubleConverter.cs
- SoapExtension.cs
- ObjectStateFormatter.cs
- ErasingStroke.cs
- ExecutionEngineException.cs
- validationstate.cs
- StateWorkerRequest.cs
- ViewKeyConstraint.cs
- SqlVersion.cs
- MetafileEditor.cs
- LambdaCompiler.Expressions.cs
- EdmFunction.cs
- MaterializeFromAtom.cs
- FederatedMessageSecurityOverHttpElement.cs
- Base64Stream.cs
- ArrayItemValue.cs
- TextReader.cs
- RegexParser.cs
- Scheduler.cs
- VisualTreeUtils.cs
- DataGridViewAdvancedBorderStyle.cs
- CommandValueSerializer.cs
- HtmlInputHidden.cs
- TakeQueryOptionExpression.cs
- KnownBoxes.cs
- MachineKeySection.cs
- StrongName.cs
- Button.cs
- SessionStateSection.cs
- DataConnectionHelper.cs
- FormattedTextSymbols.cs
- CfgParser.cs
- ToolStripSplitStackLayout.cs
- MissingFieldException.cs
- PathStreamGeometryContext.cs
- HttpDictionary.cs
- XmlDataSourceNodeDescriptor.cs
- ReadOnlyObservableCollection.cs
- SQLBoolean.cs
- HMACSHA384.cs
- DbParameterHelper.cs
- SystemResourceHost.cs
- XmlTextReader.cs
- Calendar.cs
- RemoteHelper.cs
- ZipIOCentralDirectoryFileHeader.cs
- SettingsProperty.cs
- NavigationCommands.cs
- UIHelper.cs
- DesignerInterfaces.cs
- MouseCaptureWithinProperty.cs
- TemplateBuilder.cs
- BindingExpressionUncommonField.cs
- DocComment.cs
- NumberFormatInfo.cs
- WorkItem.cs
- ProfessionalColors.cs
- TextEffect.cs
- Debug.cs
- AppDomainShutdownMonitor.cs
- ProxyWebPartManager.cs
- ExtendLockCommand.cs
- XmlSignatureProperties.cs
- SiteMapNodeItemEventArgs.cs
- Blend.cs
- TargetControlTypeAttribute.cs
- StringDictionaryWithComparer.cs
- MemberDomainMap.cs
- ListControlBuilder.cs
- MailAddressCollection.cs
- Calendar.cs
- FileRecordSequenceCompletedAsyncResult.cs
- InvalidCardException.cs
- GenericUI.cs
- ConfigurationLockCollection.cs
- coordinatorfactory.cs
- GuidTagList.cs
- DiagnosticTrace.cs
- AdjustableArrowCap.cs
- UnsafeNativeMethodsMilCoreApi.cs
- RootProfilePropertySettingsCollection.cs
- DataSourceViewSchemaConverter.cs