예제 #1
0
파일: Form1.cs 프로젝트: Vadim231/spsp
        private void btnStart_Click(object sender, EventArgs e)
        {
            if (txtSourceFile.Text.Trim().Length == 0 ||
                txtDestFile.Text.Trim().Length == 0)
            {
                MessageBox.Show("Файл не указан");
                return;
            }
            if (thCopyFile != null)
            {
                return;
            }
            thCopyFile = new Thread(ThCopyRoutine);
            thCopyFile.IsBackground = true;
            paramCopyFile           = new CopyParam();

            paramCopyFile.srcFileName =
                txtSourceFile.Text.Trim();
            paramCopyFile.destFileName =
                txtDestFile.Text.Trim();

            paramCopyFile.frm  = this;
            pbFileCopy.Value   = 0;
            pbFileCopy.Minimum = 0;
            pbFileCopy.Maximum = 1000;
            pbFileCopy.Step    = 100;

            thCopyFile.Start(paramCopyFile);
        }
예제 #2
0
파일: Form1.cs 프로젝트: Vadim231/SP2New
        private void btnStart_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Копирование файла идет не по 4096 кб, а по 200кб. Сделано специально, чтобы можно было успеть поставить процесс на паузу.", "ВНИМАНИЕ", MessageBoxButtons.OK, MessageBoxIcon.Warning);

            if (txtSourceFile.Text.Trim().Length == 0 ||
                txtDestFile.Text.Trim().Length == 0)
            {
                MessageBox.Show("Не указаны рабочие файлы");
                return;
            }
            if (thCopyFile != null)
            {
                return;
            }
            thCopyFile = new Thread(ThCopyRoutine);
            thCopyFile.IsBackground = true;
            paramCopyFile           = new CopyParam();

            paramCopyFile.srcFileName =
                txtSourceFile.Text.Trim();
            paramCopyFile.destFileName =
                txtDestFile.Text.Trim();

            paramCopyFile.frm  = this;
            pbFileCopy.Value   = 0;
            pbFileCopy.Minimum = 0;    //   0.0 %
            pbFileCopy.Maximum = 1000; // 100.0 %
            pbFileCopy.Step    = 100;  //  10.0 %

            thCopyFile.Start(paramCopyFile);
        }
예제 #3
0
파일: Form1.cs 프로젝트: Vadim231/SP2New
        int readSize = 200; //для того, чтобы можно было успеть на паузу!

        void ThCopyRoutine(object arg)
        {
            CopyParam  par = arg as CopyParam;
            FileStream src =
                new FileStream(par.srcFileName,
                               FileMode.Open,
                               FileAccess.Read);
            FileStream dst =
                new FileStream(par.destFileName,
                               FileMode.OpenOrCreate,
                               FileAccess.Write);

            // временный буффер для чтения-записи
            byte[] buf = new byte[readSize];

            // Получение длины файла
            FileInfo fi       = new FileInfo(par.srcFileName);
            long     fileSize = fi.Length;
            long     readAll  = 0;

            while (!par.IsStop)
            {
                int readBytes = src.Read(buf, 0, readSize);
                dst.Write(buf, 0, readBytes);
                // общее число прочтенных байтов
                readAll += readBytes;
                // 0...1000 ==> 0.0 ... 100.0
                int readProcent =
                    (int)((double)readAll / fileSize * 100.0 * 10 + 0.5);
                //par.frm.pbFileCopy.Value = ReadProcent;
                par.frm.pbFileCopy.Invoke(new Action <int>(
                                              (x) => { par.frm.pbFileCopy.Value = x;
                                                       //par.frm.pbFileCopy.Invalidate();
                                                       par.frm.pbFileCopy.Update(); }),
                                          readProcent);

                //if (readBytes < ReadSize) {
                if (readAll == fileSize)
                {
                    par.IsStop = true; //break;
                }
                par.evnPause.WaitOne();
            }
        }
예제 #4
0
파일: Form1.cs 프로젝트: Vadim231/spsp
        void ThCopyRoutine(object arg)
        {
            CopyParam  par = arg as CopyParam;
            FileStream src =
                new FileStream(par.srcFileName,
                               FileMode.Open,
                               FileAccess.Read);
            FileStream dst =
                new FileStream(par.destFileName,
                               FileMode.OpenOrCreate,
                               FileAccess.Write);

            byte[] buf = new byte[readSize];


            FileInfo fi       = new FileInfo(par.srcFileName);
            long     fileSize = fi.Length;
            long     readAll  = 0;

            while (!par.IsStop)
            {
                int readBytes = src.Read(buf, 0, readSize);
                dst.Write(buf, 0, readBytes);

                readAll += readBytes;

                int readProcent =
                    (int)((double)readAll / fileSize * 100.0 * 10 + 0.5);
                par.frm.pbFileCopy.Invoke(new Action <int>(
                                              (x) => { par.frm.pbFileCopy.Value = x;
                                                       par.frm.pbFileCopy.Update(); }),
                                          readProcent);

                if (readAll == fileSize)
                {
                    par.IsStop = true;
                }
                par.evnPause.WaitOne();
            }
        }