Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 17
1

Синхронизация файлов в двух папках. При работе с большими файлами возникает ошибка "Файл занят другим процессом"

18.01.2012, 23:30. Показов 2913. Ответов 8
Метки нет (Все метки)

Доброго времени суток.
У меня такой вопрос. Пишу программу для синхронизации данных в двух директориях.
Синхронизация происходит как по клику по кнопке так и при свернутом в трей режиме.
В программе использую FileSystemWatcher и методы Change и Delete.
Допустим я синхронизирую Folder1 и Folder2.
Когда я копирую напр. файлы(большие) в Folder1, то программа начинает синхронизировать эти папки и сталкиаеться с пробемой : "файл занят другим процесом".
Вопрос: как отследить завершения копирования винды, чтобы потом начинать копирование программой.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2012, 23:30
Ответы с готовыми решениями:

Ошибка: Файл занят другим процессом
Доброго времени суток. Пишу программку которая должна перемещать изображения с разрешением...

Файл занят другим процессом
Запускаю программу в несколько потоков. В итоге получаю данную ошибку. Прочитал, что для...

Как удалить файл который занят другим процессом?
Все Здрасте! Уважаемые такая проблема, облазил весь интернет не нашел подходящего решения. Пишу...

Копирование файла на место удаленного. Ошибка "Файл занят"
Столкнулся с очень своеобразной проблемой. В цикле постоянно копируется и запускается консольная...

8
Эксперт .NET
15349 / 11635 / 3053
Регистрация: 17.09.2011
Сообщений: 19,479
18.01.2012, 23:39 2
Можно конечно проверить все открытые дескрипторы в системе, но винда - система многозадачная, потому нет гарантии того, что по окончании проверки файл не откроет другой процесс.
Так что самый верный способ - при возникновении события подождать десяток-два милисекунд, чтобы дать другому процессу время на закрытие дескриптора, а потом попробовать скопировать файл.
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 17
19.01.2012, 09:48  [ТС] 3
Ну а если файл большой и на протяжении десяток-два милисекунд процес копирования не закончиться?
Я в программировании новичок и может мои вопросы покажуться вам тупыми, ну тогда уж извените.
0
9 / 8 / 1
Регистрация: 17.10.2011
Сообщений: 50
19.01.2012, 11:23 4
После окончания копирования файла освобождай процесс, который занимается твоим файлом. Можно кусок кода где происходит процесс?
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 17
19.01.2012, 11:56  [ТС] 5
После окончания копирования файла освобождай процесс
Так проблема и состоит в том чтоб определить окончания копирования.
А может нужно пойти другим путьом.
0
Эксперт .NET
15349 / 11635 / 3053
Регистрация: 17.09.2011
Сообщений: 19,479
19.01.2012, 13:17 6
elektron, вопросы нормальные, но они связаны не столько с программированием, сколько с проектировочной задачей: что делать, если файл занят другим процессом?
Ответ: игнорировать этот файл и попытаться скопировать его при следующей проверке, сгенерировав лог с ошибкой. По крайней мере, так делают все известные мне синхронизаторы.

Ну и ни в коем случае не пытаться убить процесс, который держит файл. Ваша программа не знает что это за процесс, потому не стоит играть в ОС, а просто выполнять свою задачу: копировать файлы из одной папки в другую.
1
1308 / 981 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
19.01.2012, 15:00 7
elektron, я бы сделал в лоб: если файл занят другим процессом, то ставим таймер, который каждую секунду проверяет не закрылся ли он, и если да - то копирует и его (все остальные файлы копируются в обычном режиме). если, допустим, через минуту файл не закрылся, то уже пишем в лог сообщение об ошибке доступа и выключаем таймер.
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 17
19.01.2012, 21:56  [ТС] 8
Спасибо большое за помощ.
Я как раз розсматриваю вариант с таймером.
Если получиться то отпишу.

Добавлено через 1 минуту
Если у кого еще варианты есть то напишите.
0
47 / 47 / 6
Регистрация: 09.11.2010
Сообщений: 308
20.01.2012, 02:07 9
можно пропустить это файл при копировании, а потом выдать пользователю, что файл не был скопирован. а пользователь уже пусть что хотит, то и делает
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2012, 02:07

Ошибка "Файл базы данных занят" при попытке подключения к ней
работаю с бд через шарп . C:\Temp\Паспорт.fdb" в этой директории потом папку темп перекидываю на...

Ошибка "Файл занят другим процессом"
Написанная программа отправляет некоторые файлы по почте (smtp), после чего эти же файлы...

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

Файл занят другим процессом
Здравствуйте. Проблема стара как мир, но разобраться с ней у меня не получается. Моя программа в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.