С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
7 / 7 / 1
Регистрация: 12.04.2013
Сообщений: 88

Копирование папки с файлами

10.06.2013, 19:40. Показов 5343. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем нужно копировать папку с файлами. Есть у меня программа которая копирует файл, а вот как папку копировать - не знаю. Ниже привожу код и сам проект, может кто поможет исправить копирование файла на копирование папки

femMain.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
......................
using System.IO;
 
namespace TestFileCopy
{
    public partial class frmMain : Form
    {
        FileCopy fc = new FileCopy();
 
        public frmMain()
        {
            InitializeComponent();
            fc.OnComplete += new Complet(fc_OnComplete);
            fc.OnProgress += new Progress(fc_OnProgress);
        }
 
        void fc_OnProgress(string message, int procent)
        {
 
              BeginInvoke(new MethodInvoker(delegate
              {
                  prMain.Value = procent;
                  lblInfo.Text = message;
              }));
        }
 
        void fc_OnComplete(bool ifComplete)
        {
            if (ifComplete)
                MessageBox.Show("Копирование файла успешно завершено", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
            else
                MessageBox.Show("Копирование файла завершено с ошибкой", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
 
        private void btnView1_Click(object sender, EventArgs e)
        {
            if (dlgFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtPathToSource.Text = dlgFile.FileName;
            }
        }
 
        private void btnView2_Click(object sender, EventArgs e)
        {
            if (dlgFolder.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                txtPathToDest.Text = Path.Combine(dlgFolder.SelectedPath, Path.GetFileName(txtPathToSource.Text));
            }
        }
 
        private void btnCopy_Click(object sender, EventArgs e)
        {
            bgWorker.RunWorkerAsync();
        }
 
        private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            fc.CopyFile(txtPathToSource.Text, txtPathToDest.Text);
        }
    }
}
FileCopy.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using System;
......................
using System.IO;
 
namespace TestFileCopy
{
    public delegate void Complet(bool ifComplete);
    public delegate void Progress(string message, int procent);
 
 
    class FileCopy
    {
 
        // Событие на завершение копирования файла
        public event Complet OnComplete;
 
        // Событие во время копирования
        public event Progress OnProgress;
 
        // Размер буфера в байтах
        public int BufferLenght { get; set; }
 
        public FileCopy()
        {
            //задаем размер буфера
            BufferLenght = 1024;
        }
 
        //sourceFile Путь к исходному файлу
        //destinationFile Путь к целевому файлу
        public void CopyFile(string sourceFile, string destinationFile)
        {
            //Создаем буфер по размеру исходного файла
            //В буфер будем записывать информацию из файла
            Byte[] streamBuffer = new Byte[BufferLenght];
            //Общее количество считанных байт
            long totalBytesRead = 0;
            //Количество считываний
            //Используется для задания периода отправки сообщений
            int numReads = 0;
 
            //Готовим поток для исходного файла
            using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
            {
                //Получаем длину исходного файла
                long sLenght = sourceStream.Length;
                //Готовим поток для целевого файла
                using (FileStream destinationStream = new FileStream(destinationFile, FileMode.Create, FileAccess.Write))
                {
                    //Читаем из буфера и записываем в целевой файл
                    while (true) //Из цикла выйдем по окончанию копирования файла
                    {
                        //Увеличиваем на единицу количество считываний
                        numReads++;
                        //Записываем в буфер streamBuffer BufferLenght байт
                        //bytesRead содержит количество записанных байт
                        //это количество не может быть больше заданного BufferLenght
                        int bytesRead = sourceStream.Read(streamBuffer, 0, BufferLenght);
 
                        //Если ничего не было считано
                        if (bytesRead == 0)
                        {
                            //Записываем информацию о процессе
                            getInfo(sLenght, sLenght);
                            //и выходим из цикла
                            break;
                        }
 
                        //Записываем данные буфера streamBuffer в целевой файл
                        destinationStream.Write(streamBuffer, 0, bytesRead);
                        //Для статистики запоминаем сколько уже байт записали
                        totalBytesRead += bytesRead;
 
                        //Если количество считываний кратно 10
                        if (numReads % 10 == 0)
                        {
                            //Записываем информацию о процессе
                            getInfo(totalBytesRead, sLenght);
                        }
 
                        //Если количество считанных байт меньше буфера
                        //Значит это конец
                        if (bytesRead < BufferLenght)
                        {
                            //Записываем информацию о процессе
                            getInfo(totalBytesRead, sLenght);
                            break;
                        }
                    }
                }
            }
 
            //Отправляем сообщение что процесс копирования закончен удачно
            if (OnComplete != null)
                OnComplete(true);
        }
 
        // Задаем информацию о процессе копирования
        //totalBytesRead Всего байт прочитано
        //sLenght Размер файла
        private void getInfo(long totalBytesRead, long sLenght)
        {
            //Формируем сообщение
            string message = string.Empty;
            double pctDone = (double)((double)totalBytesRead / (double)sLenght);
            message = string.Format("Считано: {0} из {1}. Всего {2}%",
                     totalBytesRead,
                     sLenght,
                     (int)(pctDone * 100));
            //Отправляем сообщение подписавшимя на него
            if (OnProgress != null && !double.IsNaN(pctDone))
                OnProgress(message, (int)(pctDone * 100));
        }
    }
}
Вложения
Тип файла: rar TestFileCopy.rar (70.4 Кб, 34 просмотров)
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.06.2013, 19:40
Ответы с готовыми решениями:

Копирование и перемещение папки с файлами
Существует папка, размещенная по постоянному пути. К примеру &quot;C:\\Programma\directory for...

Копирование папки с файлами с присвоением даты в качестве имени
Помогите написать код... мне надо скопировать папку и назвать ее той датой, которой ее копировали

Как сделать progress bar на копирование папки с файлами и папками?
Помогите. Как сделать progress bar на копирование папки с файлами и папками. Если это очень сложно, хотя бы как сделать сообщение об...

2
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
12.06.2013, 22:39
Ознакомьтесь - http://msdn.microsoft.com/ru-r... 48994.aspx
Вкратце: пробегаетесь по всем файлам и копируете их по одному.
0
7 / 7 / 1
Регистрация: 12.04.2013
Сообщений: 88
24.10.2013, 18:36  [ТС]
Разобрался сам, ниже программа - может кому поможет =)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        int maxbytes = 0;
        int copied = 0;
        int total = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void overview1_Click(object sender, EventArgs e)
        {
            if (folderDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox1.Text = folderDialog1.SelectedPath;
            }
        }
 
        private void overview2_Click(object sender, EventArgs e)
        {
            if (folderDialog2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = folderDialog2.SelectedPath;
            }
        }
 
        private void btnCopy_Click(object sender, EventArgs e)
        {
            Copy1(folderDialog1.SelectedPath, folderDialog2.SelectedPath);
            MessageBox.Show("Готово");
        }
 
        public void Copy1(string sourceDirectory, string targetDirectory)
        {
 
            DirectoryInfo diSource = new DirectoryInfo(sourceDirectory);
            DirectoryInfo diTarget = new DirectoryInfo(targetDirectory);
            //Получает размер всех файлов, присутствующих в исходной папке.
            GetSize(diSource, diTarget);
            maxbytes = maxbytes / 1024;
 
            progressBar1.Maximum = maxbytes;
            CopyAll(diSource, diTarget);
        }
  
         public void CopyAll(DirectoryInfo source, DirectoryInfo target)
        {
           
            if (Directory.Exists(target.FullName) == false)
            {
                Directory.CreateDirectory(target.FullName);
            }
 
            foreach (FileInfo fi in source.GetFiles())
            {               
                fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
 
                total += (int)fi.Length;
               
                copied += (int)fi.Length;
                copied /= 1024;
                progressBar1.Step =copied;
                            
                progressBar1.PerformStep();
                label1.Text = (total/1048576).ToString() + "MB of " + (maxbytes/1024).ToString() + "MB copied";
 
                label1.Refresh();
            }
 
            foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
            {
                DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                CopyAll(diSourceSubDir, nextTargetSubDir);
            }
        }
         public void GetSize(DirectoryInfo source, DirectoryInfo target)
         {
             if (Directory.Exists(target.FullName) == false)
             {
                 Directory.CreateDirectory(target.FullName);
             }
             foreach (FileInfo fi in source.GetFiles())
             {
                 maxbytes += (int)fi.Length;//Размер файла
             }
             foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
             {
                 DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name);
                 GetSize(diSourceSubDir, nextTargetSubDir);
             }
 
         }
    }
}
Вложения
Тип файла: rar WindowsFormsApplication3.rar (52.6 Кб, 94 просмотров)
4
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2013, 18:36
Помогаю со студенческими работами здесь

Копирование файлов из папки в другую папку с заменой
Хочу для автообновления сделать копирование из папки Update в папку с .exe. Thread UPDcenter = new Thread(() =&gt; { ...

FileSystemWatcher - как отследить копирование папки с файлами?
Не понимаю как отследить копирование или перемещение папки с файлами. Отслеживание создания отдельно файлов или отдельно папки работает...

Копирование папки с файлами
Доброго времени суток. приведите плз пример как копировать папку со всеми файлами и подкаталогами...

Копирование папки с файлами в выходной каталог
Доброго всем дня! Столкнулся с такой проблемой. Есть у меня папка с кучей файлов и вложенных папок. Мне нужно добавить эту папку в проект...

Работа с файлами - добавление, копирование, просмотр папки
Подскажите, пожалуйста, как реализовать работу с документами разных форматов в БД, а именно: в форме для ввода данных пользователь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru