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

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

20.09.2017, 19:51. Показов 7933. Ответов 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
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
18295 / 14219 / 5368
Регистрация: 17.03.2014
Сообщений: 28,896
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru