All pastes #95330 Raw Edit

Stuff

public text v1 · immutable
#95330 ·published 2006-07-21 22:33 UTC
rendered paste body
private void InternalCopyFile( FileStream sStream, FileStream dStream, FileInfo file )
        {
            sStream.Seek( 0, SeekOrigin.Begin );
            dStream.Seek( 0, SeekOrigin.Begin );

            if( _CopyBuffer == null )
                _CopyBuffer = new byte[2097152];

            DateTime start = DateTime.Now;
            int sent = 0, totalSent = 0; 
            int badCount = 0;
            int percent = 0;

            while( totalSent < file.Length )
            {
                int chunkSize = ( int )Math.Min( ( long )_CopyBuffer.Length, sStream.Length - sStream.Position );

                sStream.Read( _CopyBuffer, 0, chunkSize );
                dStream.Write( _CopyBuffer, 0, chunkSize );

                if( GetFlag( CopyFlags.Scan ) )
                    badCount += InternalScan( _CopyBuffer );

                totalSent += chunkSize;
                _CopySize += chunkSize;
                sent += chunkSize;

                bool reset = false;

                if( _ClipBandwidth && start + TimeSpan.FromSeconds( 1.0 ) < DateTime.Now )
                {
                    reset = true;
                }
                else if( _ClipBandwidth && _MaxBandwidth == 0 )
                {
                    while( _MaxBandwidth == 0 )
                    {
                        Thread.Sleep( 500 );
                    }
                    reset = true;
                }
                else if( _ClipBandwidth && sent > _MaxBandwidth )
                {
                    int toSleep = 1000 - ( DateTime.Now.Millisecond - start.Millisecond );
                    Thread.Sleep( toSleep );
                    reset = true;
                }

                if( reset )
                {
                    sent = 0;
                    start = DateTime.Now;
                }

                int nPercent = Utility.GetPercent( sStream.Position, sStream.Length );
                if( percent < nPercent )
                {
                    percent = nPercent;

                    if( OnCopyPercentChange != null )
                        OnCopyPercentChange( percent );
                }

                nPercent = Utility.GetPercent( _CopySize, _CombinedFileSize );
                if( _TotalPercent < nPercent )
                {
                    _TotalPercent = nPercent;

                    if( OnTotalPercentChange != null )
                        OnTotalPercentChange( _TotalPercent );
                }
            }

            if( GetFlag( CopyFlags.Scan ) && badCount > 0 )
                _DamagedFiles.Add( new DamagedFile( file, badCount ) );
        }