Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45

Копирование файлов из папки в другую папку с заменой

20.09.2017, 19:51. Показов 7881. Ответов 10

Студворк — интернет-сервис помощи студентам
Хочу для автообновления сделать копирование из папки Update в папку с .exe.
C#
1
2
3
4
5
6
7
8
9
10
11
    Thread UPDcenter = new Thread(() =>
            {
                string upd = Application.StartupPath + "/Update";            //Путь папки с обновлением
                string basic = Application.StartupPath;                            //Путь к .exe
                Directory.CreateDirectory(upd);
                ZipFile.ExtractToDirectory(Application.StartupPath + "/Update.zip", upd, Encoding.ASCII);       
     //Вот здесь должно происходить копирование
                MessageBox.Show("Обновление завершено успешно!", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
            });
            UPDcenter.Start();
            metroButton1.Enabled = true;
При стандартном копировании ругается что файл уже используется. Как мне закрыть программу при этом что бы файлы копировались и потом снова всё открылось. Копировать нужно с заменой так как ругается что такой файл уже существует, помогите.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.09.2017, 19:51
Ответы с готовыми решениями:

Копирование всех файлов с заданным расширением из одной заданной папки в другую заданную папку
Создайте командный файл, который копирует все файлы с расширением, заданным в качестве первого параметре из папки, заданной вторым парамет-...

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот это) - Копирование всех файлов с...

Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот это) - Копирование всех файлов с...

10
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18244 / 14158 / 5366
Регистрация: 17.03.2014
Сообщений: 28,847
Записей в блоге: 1
20.09.2017, 22:23
Ekijah, потоки здесь не помогут. Файл занят потому что Windows держит файл открытым пока работает процесс. И поэтому перезапись exe в этот момент невозможна. Зато можно переименовать самого себя и избежать проблемы
C#
1
File.Move(Application.ExecutablePath, Application.ExecutablePath + ".bak");
При этом алгоритм в целом должен быть таким:
1) В методе Main удаляем файл нашеПриложение.exe.bak, если он существует
2) Перед обновлением, переименовываем нашеПриложение.exe в нашеПриложение.exe.bak, распаковываем архив. Если ошибок нет, то запускаем нашеПриложение.exe. Если есть ошибки, то удаляем новый файл и переименовываем нашеПриложение.exe.bak в нашеПриложение.exe
0
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45
20.09.2017, 23:26  [ТС]
Проблема не в .exe я даже обновление начинаю с отдельного приложения от основного .exe проблема в том что я использую для форм MetroFramework и при копировании файлов он отказывается его копировать так как он уже используется. Как копировать файлы из папка с обновлениями в основную папку так и не нашел...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18244 / 14158 / 5366
Регистрация: 17.03.2014
Сообщений: 28,847
Записей в блоге: 1
20.09.2017, 23:35
Лучший ответ Сообщение было отмечено Ekijah как решение

Решение

Ekijah, в таком случае лучше выделить обновлялщик в отдельный exe и чтобы он не использовал никаких файлов основного приложения. При обновлении мы запускаем обновлялщик, который дожидается завершения родительского процесса, выполняет обновление и запускает приложение.
0
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45
20.09.2017, 23:37  [ТС]
Хотел сделать всё красиво с progressbar а в итоге сделаю просто простой .exe который будет запускаться с основного .exe
Вопрос с копированием так и не решен так как выскакивает ошибка что такой файл уже есть
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18244 / 14158 / 5366
Регистрация: 17.03.2014
Сообщений: 28,847
Записей в блоге: 1
20.09.2017, 23:42
Цитата Сообщение от Ekijah Посмотреть сообщение
Хотел сделать всё красиво с progressbar
Что мешает?

Цитата Сообщение от Ekijah Посмотреть сообщение
Вопрос с копированием так и не решен так как выскакивает ошибка что такой файл уже есть
Если речь идет о копировании с помощью метода File.Copy, то используй перегрузку с тремя аргументами которая позволяет указать что файл нужно перезаписать, если он уже существует.
0
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45
20.09.2017, 23:45  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Что мешает?
То что файл с анимацией тоже уже используется

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Если речь идет о копировании с помощью метода File.Copy, то используй перегрузку с тремя аргументами которая позволяет указать что файл нужно перезаписать, если он уже существует.
А как это сделать с 9 файлами? Ведь File.Copy скопирует только один файл, все файлы после распаковки находятся в отдельной папке оттуда их нужно скопировать с заменой в основу
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18244 / 14158 / 5366
Регистрация: 17.03.2014
Сообщений: 28,847
Записей в блоге: 1
20.09.2017, 23:47
Цитата Сообщение от Ekijah Посмотреть сообщение
То что файл с анимацией тоже уже используется
Включить его копию в апдейтер религия не позволяет?

Цитата Сообщение от Ekijah Посмотреть сообщение
А как это сделать с 9 файлами?
Циклом
0
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45
20.09.2017, 23:48  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Включить его копию в апдейтер религия не позволяет?
Так он и так включён, при обновлении он пытается его заменить новым файлом а в итоге он уже используется апдейтером
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18244 / 14158 / 5366
Регистрация: 17.03.2014
Сообщений: 28,847
Записей в блоге: 1
20.09.2017, 23:51
Ekijah, значит он не включен в него, а лежит рядом. Включи файл в апдейтер в виде ресурса.
0
0 / 0 / 0
Регистрация: 25.01.2017
Сообщений: 45
21.09.2017, 22:39  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
      void CopyFolder(string upd, string basic)
        {
 
            if (!Directory.Exists(basic))
                Directory.CreateDirectory(basic);
 
            string[] files = Directory.GetFiles(upd);
 
            foreach (string file in files)
                File.Copy(file, Path.Combine(basic, Path.GetFileName(file)),overwrite: true);
 
            string[] folders = Directory.GetDirectories(upd);
 
            foreach (string folder in folders)
                CopyFolder(folder, Path.Combine(basic, Path.GetFileName(folder)));
        }
Всё равно пишет что файл уже существует хоть и overwrite на true стоит. я добавил все файлы которые использует апдейтер в ресурсы.

Добавлено через 22 часа 28 минут
Решил проблему отделив апдейтер от основных файлов и полным закрытием основного .exe перед обновлением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2017, 22:39
Помогаю со студенческими работами здесь

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

Копирование файлов из папки в папку
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Exam_1 { ...

Копирование папки с использованием команды XCOPY с заменой одноимённых файлов в папке назначения
Всем привет как сделать написать бат который копировал бы папки с заменой файлов внутри папки я написал так и добавил в планировщик...

Копирование файлов с папки в папку и запись в txt
Добрый вечер, помогите сделать батник чтоб: - С папки HP копировались все файлы в папку STD - А в папке log создавался файлик txt с...

Копирование файлов из одной папки в другую, но с пропуском одинаковых файлов в этих папках
Доброго времени суток. Прошу помощи в написании батника. Задача: Есть папка А с файлами 1,2,3 и папка Б с этими же файлами 1,2 и 3. ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru