WriteTimeStream.cs source code in C# .NET

Source code for the .NET framework in C#

                        

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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK