Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20

Асинхронный ввод/вывод(Копирование в фоновом режиме)

27.05.2011, 19:27. Показов 8417. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите организовать копирование в фоновом режиме..т.е. что бы копирование было организованно с помощью ассинхронного ввода/вывода...вот нашел прогу,а копирование в фоновом режиме не могу осуществить...помогите кто может...(копирование осуществляеться по нажатию ПКМ на файле и папке)
Вложения
Тип файла: rar последнее смотреть.rar (79.7 Кб, 103 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2011, 19:27
Ответы с готовыми решениями:

Можно ли, чтобы программа сама, в фоновом режиме, работала в браузере?
Есть задумки по-поводу одной программы. Она должна сама работать в браузере без моей помощи. Может какая-то библиотечка нужна? Если это...

Как сделать обработку данных (MySQL) в фоновом режиме
Как сделать обработку данных (mysql) в фоновом режиме, чтобы программа во время запросов не зависала....

Работа в фоновом режиме
Приветствую всех. Вопрос следующий. Как сделать так, чтобы работа выполняла работу в фоновом режиме? Т.е если к примеру при не свернутом...

22
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
28.05.2011, 20:39  [ТС]
господа реально срочно нужно..помогите плиз..
0
Заблокирован
28.05.2011, 23:16
Цитата Сообщение от Goldkig Посмотреть сообщение
господа реально срочно нужно..помогите плиз..
Господа все по заграницам
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
        private void CopyDir(DirectoryInfo soursDir, DirectoryInfo destDir)
        {
            while (true)
            {
                CreateDir(soursDir, destDir);
 
                //теперь проверяем наличие в ней папок
                DirectoryInfo[] dirs = soursDir.GetDirectories();
                if (dirs.Length > 0)
                {
                    foreach (DirectoryInfo di in dirs)
                    {
                        DirectoryInfo dir = new DirectoryInfo(destDir.FullName.ToString() + "\\" + di.Name.ToString());
                        CopyDir(di, dir);
                    }
                    break;
                }
                else break;
            }
        }
 
        //создаем папку
        private void CreateDir(DirectoryInfo soursDir, DirectoryInfo destDir)
        {
            if (!destDir.Exists) destDir.Create();
 
            //проверяем наличие файлов
            FileInfo[] fls = soursDir.GetFiles();
            if (fls.Length > 0) //копируем если есть
                foreach (FileInfo fi in fls)
                    fi.CopyTo(destDir.FullName.ToString() + "\\" + fi.Name.ToString(), true);
        }
 
        public void копироватьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
            ListViewItem item = listView1.SelectedItems[0];
            string copy = this.Text + "\\" + item.Text;
            if (item.ImageIndex == 1)
            {
                DirectoryInfo soursDir = new DirectoryInfo(copy); //папка из которой копировать
                DirectoryInfo destDir = new DirectoryInfo("D:\\new" + item.Text); //куда копируешь
 
                CopyDir(soursDir, destDir);  
 
              
            }
            else
            {
 
                File.Copy(copy, "D:\\new" + item.Text);
            }
          
        }
1
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
29.05.2011, 10:51  [ТС]
спасибо с копированием..вот и многопаточностью разобрался...если не затруднит тебя помоги мне еще с удалением,а то я сделал впринципе но если папка пустая,а если в ней чет содержится то вообще никак не хочет DELETE делать..
0
Заблокирован
29.05.2011, 11:56
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
private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string message = "Вы действительно хотите удалить?";
            string caption = "Удаление файла";
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
 
            // Displays the MessageBox.
 
            result = MessageBox.Show(message, caption, buttons);
 
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                ListViewItem item = listView1.SelectedItems[0];
                string delete = this.Text + "\\" + item.Text;
               if (item.ImageIndex == 1)
               {
                   Directory.Delete(delete,true);
                   
               }
                else  File.Delete(delete);
               
               
            }
 
            GetFiles();
            
        }
1
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.05.2011, 15:08
3G, я чет не разберусь, где асинхронность?

Goldkig, чтобы сделать копирование асинхронным используйте FileStream и рекуррентный метод копирования файлов из каталога в каталог.
0
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
29.05.2011, 15:47  [ТС]
это будет еще все ассиннхронность и тому подобное я сам уже все сделаю...вот еще подскажите как подключить типа что-то StatusBar на копирование (чтобы показывало результат копирования..)

Добавлено через 2 минуты
Цитата Сообщение от Koran Посмотреть сообщение

чтобы сделать копирование асинхронным используйте FileStream и рекуррентный метод копирования файлов из каталога в каталог.
рекурентный метод копирования-это как понять?

Добавлено через 7 минут
Цитата Сообщение от 3G Посмотреть сообщение
C#
1
                   Directory.Delete(delete,true);
Спасибо,сам так же все делал единственное что мне нехватало это вот этого метода....я делал dirs.Delete();
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.05.2011, 16:02
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static public void CopyFolder(string sourceFolder, string destFolder) {
 
            if (!Directory.Exists(destFolder))
                Directory.CreateDirectory(destFolder);
 
            string[] files = Directory.GetFiles(sourceFolder);
 
            foreach (string file in files)
                File.Copy(file, Path.Combine(destFolder, Path.GetFileName(file)));
 
            string[] folders = Directory.GetDirectories(sourceFolder);
 
            foreach (string folder in folders) {
                CopyFolder(folder, Path.Combine(destFolder, Path.GetFileName(folder)));
            }
        }
только там где копирование лучше написать свой асинхронный метод копирования файлов.

по поводу прогресс бара посмотрите что вам подскажет гугл на запрос "Async File Copy". советуют использовать BackgroundWorker

Добавлено через 1 минуту
кстати, наткнулся на сторонний код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class AsyncFileCopier
    {
        public delegate void FileCopyDelegate(string sourceFile, string destFile);
 
        public static void AsynFileCopy(string sourceFile, string destFile)
        {
            FileCopyDelegate del = new FileCopyDelegate(FileCopy);
            IAsyncResult result = del.BeginInvoke(sourceFile, destFile, CallBackAfterFileCopied, null);
        }
 
        public static void FileCopy(string sourceFile, string destFile)
        { 
            // Code to copy the file
        }
 
        public static void CallBackAfterFileCopied(IAsyncResult result)
        {
            // Code to be run after file copy is done
        }
    }
0
29.05.2011, 17:42

Не по теме:

Цитата Сообщение от Goldkig Посмотреть сообщение
рекурентный метод копирования-это как понять?
Господин Koran вероятно имел ввиду рекурсивный метод и он по-рассеянности не заметил, что я тебе такой метод копирования уже выложил в своём первом посте и по доброте своей душевной решил сам такой же выложить:)

0
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
29.05.2011, 18:33  [ТС]
извените меня ,но я помойму поспешил с выводами насчет ассинхронности..есль можно сделайте мне фоновое копирование...а то у мну оно чет не пашет,может я что-то не то делаю..((
0
Заблокирован
29.05.2011, 18:39
Посмотри.
Вложения
Тип файла: rar файловыйменеджер3.rar (40.4 Кб, 86 просмотров)
1
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.05.2011, 18:58
3G, у вас не совсем рекуррентный метод и я не советовал бы вам использовать FileInfo и DirectoryInfo в случае когда к файлу или к папке вы обращаетесь единожды. посчитайте сколько будет создано подобных объектов в случае копирования большого количества файлов. я привел не такой же метод как и вы

Цитата Сообщение от Goldkig Посмотреть сообщение
фоновое копирование...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        static public void CopyFolder(string sourceFolder, string destFolder) {
 
            if (!Directory.Exists(destFolder))
                Directory.CreateDirectory(destFolder);
 
            string[] files = Directory.GetFiles(sourceFolder);
 
            foreach (string file in files)
                File.Copy(file, Path.Combine(destFolder, Path.GetFileName(file)));
 
            string[] folders = Directory.GetDirectories(sourceFolder);
 
            foreach (string folder in folders) {
                CopyFolder(folder, Path.Combine(destFolder, Path.GetFileName(folder)));
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        void doOperation(string arg) {
            try {
                Directory.Delete(@"D:\BackUpFolder\", true);
            } catch (Exception e) {
                LogInFile(e.Message + " - " + "Deleting folder" + " - " + arg);
            }
 
            try {
                Directory.CreateDirectory(@"D:\BackUpFolder\");
            } catch (Exception e) {
                LogInFile(e.Message + " - " + "Creating folder" + " - " + arg);
            }
 
            try {
                CopyFolder(@"C:\Папка, которую нужно скопировать\", @"D:\BackUpFolder\");
            } catch (Exception e) {
                LogInFile(e.Message + " - " + "Copy files" + " - " + arg);
            }
            LogInFile("Complete in " + arg);
        }

Не по теме:

мне довелось писать службу, которая бекапит нужную папку через определенный промежуток времени. до сих пор вертится в моей системе



Добавлено через 1 минуту
либо в потоке:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                try {
                    Directory.Delete(pathInUSBFlash, true);
                } catch {
                    Directory.CreateDirectory(pathInUSBFlash);
                }
                Directory.CreateDirectory(pathInUSBFlash);
                Thread trCopying = new Thread(delegate() { CopyFolder(pathInPC, pathInUSBFlash); });
                trCopying.Start();
                trCopying.Join();
                MessageBox.Show("Finished!");
                SoundPlayer spNotify = null;
                if (spNotify == null) {
                    spNotify = new SoundPlayer(@"c:\Windows\Media\notify.wav");
                    Thread trPlay = new Thread(delegate() { spNotify.Play(); });
                    trPlay.Start();
                    trPlay.Join();
                    spNotify.Dispose();
                } else {
                    spNotify.Dispose();
                }
0
Заблокирован
29.05.2011, 19:11
Koran, возможно я и ошибаюсь. Вы можете изменить прогу, которую я выслал в последний раз, используя свой подход и залить её сюда? Еще бы немешало, что бы обновлялся список после полного копирования. При больших размерах папки в моём варианте этого не происходит. И еще один вопрос. Для чего static и public?
Цитата Сообщение от Koran Посмотреть сообщение
static public void CopyFolder(string sourceFolder, string destFolder)
0
мастер топоров
 Аватар для Koran
917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
29.05.2011, 19:20
Цитата Сообщение от 3G Посмотреть сообщение
Для чего static и public?
в данном случае мне достаточно было статического метода

а на прогу я посмотрю
0
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
30.05.2011, 13:54  [ТС]
как мне сделать глобальной переменную..т.е. я хочу чтобы на действие "Копировать"-выберался только то что нужно копировать и откуда...а на действие "Вставить "-ужепроисходило само копирование..т.е. получиться что я не сам программно определяю куда копировать файл,а пользователь потом зайдя в нужную деректорию нажмет "Вставить" и все копировани е будет происходить именно в это место..

Добавлено через 2 часа 56 минут
Цитата Сообщение от Koran Посмотреть сообщение
System.Threading.Thread MyThread1 =
new System.Threading.Thread(delegate() { CopyDir(soursDir, destDir); });
MyThread1.Start();
Что означает эта строчка?Это и есть что ли то что называется ассинхронный ввод\вывод?
0
Заблокирован
30.05.2011, 16:48
Цитата Сообщение от Goldkig Посмотреть сообщение
Что означает эта строчка?
Создание отдельного потока для метода CopyDir
0
0 / 0 / 0
Регистрация: 22.12.2010
Сообщений: 11
30.05.2011, 17:33
Цитата Сообщение от 3G Посмотреть сообщение
Посмотри
Чет, пока я с кодом на "вы", а много в нем еще нерабочего?
0
Заблокирован
30.05.2011, 18:52
Цитата Сообщение от aidze Посмотреть сообщение
Чет, пока я с кодом на "вы", а много в нем еще нерабочего?
Копирование и удаление, как просил ТС я сделал. А вот создание и перемещение не проверял
1
1 / 1 / 0
Регистрация: 11.05.2011
Сообщений: 20
30.05.2011, 19:23  [ТС]
Цитата Сообщение от 3G Посмотреть сообщение
Создание отдельного потока для метода CopyDir
получается что я могу точно так же реализовать удаление в отдельном потоке?
0
Заблокирован
30.05.2011, 19:25
Цитата Сообщение от Goldkig Посмотреть сообщение
получается что я могу точно так же реализовать удаление в отдельном потоке?
Конечно, если есть смысл. Но файлы и папки и так быстро удаляются.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2011, 19:25
Помогаю со студенческими работами здесь

[WPF] При нажатии на крестик окно не закрывается, а остается в фоновом режиме
Пишу игру на c# в wpf. В форме есть кнопки для закрытия программы, если нажать на них, то программа закрывается. Но если закрывать их...

Работа приложения в фоновом режиме
Здравствуйте, подскажите пожалуйста в какую сторону копать, чтобы мое приложение могло сворачиваться в скрытый значок в правом нижнем углу...

Работа программы в фоновом режиме
Как сделать чтобы при нажатие на кнопку закрытие программы (т.е. ) программа продолжала работать в фоновом режиме.

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

Запустить процесс не в фоновом режиме
Есть программа, которая работает в фоне и при выполнении определённых условий запускает другую программу, но вторая программа начинает...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru