Oleg

Как определить готовность файла?

03.04.2011, 08:09. Показов 7741. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть две программы. Первая копирует файлы из каталога 1 в каталог 2, а вторая ждет файл в каталоге 2, и затем копирует в каталог 3.
Вопрос: как определить закончилось копирование из каталога 1 в каталог 2?
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.04.2011, 08:09
Ответы с готовыми решениями:

как проверить готовность принтера?
как проверить готовность принтера?

Как отследить готовность запущенного процесса из приложения к работе с ним?
Добрый день! Я произвожу запуск *.exe из приложения на c#. Мне необходимо понять, когда *.exe закончит запуск и будет готова для работы...

Системные требования и готовность системы
Всем здравствовать. Буквально недавно, по источникам Mail.ru, Microsoft обнародовала минимальные системные требования к Win10. Мало...

62
Ghost
11.04.2011, 15:20
Студворк — интернет-сервис помощи студентам
Вопросы:
1. Кто пишет обе программы копирования?
2. Насколько сразу нужно производить копирование из одного каталога в другой?
3. можно ли пропуститть стадию копирования 1-2 и копировать сразу 1-3?
Oleg
11.04.2011, 15:29
Ghost: программа которая копирует из 1 в 2 любая (например FAR)
программа которая копирует из 2 в 3 писана нами.
пользователь, который копирует из 1 в 2 не видит 3. Так надо по безопасности.
Конечно готовность файла после копирования можно проверить попытавшись его открыть. Как это и писалось выше. Я пробовал все работает. Просто рази спортивного интереса хотел сделать так, как это положено сделать.
Ghost
11.04.2011, 15:33
Вопросы:
1. Обязательно ли копировать по цепочке 1-2-3? Можно ли пропустить стадию 2?
2. Кто пишет обе копирущие программы
3. Обязательно ли копировать файл в каталог 3 сразу после попадания файла в каталог 2?
Ghost
11.04.2011, 15:33
сорри за дубль
Ghost
11.04.2011, 18:42
Понятно. Тогда хз - общего решения я не знаю...
хотя... есть в .NET такая штука - называется FileSystemWatcher. Может - оно поможет. Вероятно - в качестве дополнения к fsw - открытие файла в эксклюзивном режиме (т.е. чтобы даже и читать никто не мог) может помочь определить - готов он к копированию или нет.

Ну и напоследок - BizTalk Server это умеет делать (как-то, как - не важно), значит - и ты можешь сделать
Ghost
11.04.2011, 18:43
2 Oleg - next time пиши всю относящуюся к делу информацию, иначе будешь засыплен пустыми советами.
1 / 1 / 0
Регистрация: 03.01.2011
Сообщений: 79
11.04.2011, 18:59
Помоему пока файл не докопируется (система не закроет его вызовом _lclose) его размер не будет равен нулю...
0
0 / 0 / 0
Регистрация: 16.11.2017
Сообщений: 1
11.04.2011, 19:32
Я использую функцию WIN API WaitForSingleObject для отлова момента окончания любого процесса. Она идеально сюда подходит и не надо ничего городить!

с ув.
0
Ghost
12.04.2011, 00:31
2 grio - тогда код - в студию.
Только учти, что far manager (как внешнее приложение) тебе никакого локального для твоей программы хэндла не подарит.
посему к коду не забудь приложить комментарии, иначе это пустой и гнилой базар.
0 / 0 / 0
Регистрация: 12.04.2007
Сообщений: 64
12.04.2011, 00:42
http://www.serverobjects.com/products.htm
WaitFor 1.0
Using this component you can pause your ASP app for a specified time, wait until a file exists or wait until the component can get exclusive read/write permissions to a file
0
Oleg
12.04.2011, 07:35
Уважаемые коллеги! Похоже, данная тема интересует многих. Поэтому что бы предотвратить лишние вопросы и не корректные ответы я решил еще раз повторить задачу.
Итак:
Имеются две рабочих станции (в дальнейшем м1 и м2) и сервер (в дальнейшем м3). В сервер вставлено две сетевых карточки. К одной сетевой карточке подключена м1, к другой м2. На сервере СПЕЦИАЛЬНО сделано так, что бы м1 не видела м2.
Теперь м1 копирует файл на м3 (на сервер) в специально отведенный каталог (в дальнейшем к1) на сервере. Копирование производится пользователем любой доступной ему программой (FAR, Total Commander, проводник, и даже можно досовым Norton). На м3 (сервере) запущена моя программа, которая сканирует каталог к1. При обнаружении файла она должна ДОЖДАТЬСЯ окончания копирования и далее переместить ее на м2.
Теперь по поводу инструмента и операционки. Все это должно работать под NT4. Стало быть, технология NET отменяется (проверено железно, NET не устанавливается на 16 разрядную операционку, собственно это и написано у мелкомягких в требованиях к установке). Для меня желательно использовать VB6. Понятно, что с помощью голого языка эту проблему не решить, значит надо использовать API.
Ну, вот теперь вопрос: как ДОЖДАТЬСЯ окончания копирования на NT4 с помощью VB6 и API. Сразу оговорюсь, дождаться надо методом специально для этого предназначенным (если таковой вообще существует!), а не путем попытки открытия или попытки захвата файла. Согласен, что косвенный метод, тоже хорош, но я бы не хотел его использовать. Должен же существовать нормальный метод, а не костыли!

Не знаю как вам, а мне вроде бы все понятно, что я тут нагородил.
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
12.04.2011, 10:24
иэх.

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

может этот способ тебя больше устроит?
обычный таймер. открываем файл из каталога сервера
проверяем его наличие на лок. диске
если нет - копируем
если есть, сравниваем размер, дату модификации, дату доступа и т.д.
т.е. копируем если файл отличается от копии на лок. диске
0
Oleg
12.04.2011, 10:35
В том то и вопрос: каким образом ты знаешь когда файл скопирован полностью и готов к переписыванию в другой каталог?
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
12.04.2011, 10:38
а никак не знаю. меня это не заботит
если у файла на сервере изменился размер, дата последнего доступа или иные аттрибуты - я его копирую на лок. диск.

и на этом всё!
0
0 / 0 / 0
Регистрация: 01.03.2010
Сообщений: 223
12.04.2011, 10:50
и еще. пользуется стандартная функция object.CopyFile ( source, destination[, overwrite] )
где object - FileSystemObject

так что если файл заблокирован (ну в него все еще пишут) - On error resume next
0
Ghost
12.04.2011, 11:36
1. (без учета полного описания задачи) Посмотрел WaitFor. Судя по используемым функциям, работает аналогично методу, предложенному 2-мя страницами ранее konst_one, только тот денег не просит за свой код )
Скомбинировав предложенный им метод с описаным в этой же теме методом определения появления файла в каталоге, можно получить вполне приличное приложение, не сильно подсаживающее сервер, без особого гемора.
2. Кстати, а что за нужда держит на НТ4? Лицензии? Или какое-то решение (аппаратное или програмное), которое под 2к не идет? В любом случае - к сожалению - возможности по развитию старых систем ограничены, и я понимаю производителей, не желающих поддерживать технологии практически 10-ти летней давности. (вопрос плавно перетекает из технического в организационный )
Comanche
12.04.2011, 11:48
Если верить http://expertanswercenter.techtarget.com/eac/knowledgebaseAnswer/0,295199,sid63_gci1044720,00.html, то копирование заканчивается, когда атрибут файла 'last access time' получает своё значение.

А если верить http://www.codeguru.com/Csharp/Csharp/cs_network/article.php/c6043/, то самое удобное решение обсуждаемой проблемы - это класс FileSystemWatcher из платформы .NET.

Однако, в первой ссылке (из двух вышеназванных) утверждается, что класс FileSystemWatcher как раз и смотрит на атрибут 'last access time'! Неужели всё настолько просто?!

Я бы не поленился проверить это (на месте автора).

PS: Кроме того, есть ПРЕДПОЛОЖЕНИЕ, что стандартная функция GetAttr() будет возвращать ошибку, если файл не до конца скопирован...
Oleg
12.04.2011, 11:58
Господа, программисты, очень прошу говорить по существу дела.
Почему NT4? Так надо.
Еще раз хочу подчеркнуть, что косвенные методы меня не интересуют.
Почему? Так я хочу. Просто для личного спортивного интереса.
Теперь мои рассуждения: если система делает некие действия (например копирует файл), значит она знает, что фай пишется, и он еще не готов. Стало быть для него открыт некий процесс. Вот окончание этого процесса я и хочу зафиксировать.
Если это не реально так и скажите.
А варианты по поводу сравнения последнего времени обновления, и т.п. все это мне понятно, но не интересно.
С уважением ко всем!
Comanche
12.04.2011, 12:50
Посмотри ссылки:
http://www.codeproject.com/file/directorychangewatcher.asp
http://vsokovikov.narod.ru/Msdn_api/Global_SDK/Overview/Base_service/Meneg_files/monitor_change_dir.htm
Messir
12.04.2011, 15:25
2 Comanche:
по поводу 'Однако, в первой ссылке (из двух вышеназванных) утверждается, что класс FileSystemWatcher как раз и смотрит на атрибут 'last access time' - он не смотрит last access time (более того - установление last access time для файлов и папок можно запретить, а watcher будет продолжать работать). А получает он уведомления непосредственно из системного журнала.

Если не привязываться к платформе .NET, то ту же функциональность можно реализовать через FindFirstChangeNotification/FindNextChangeNotification
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2011, 15:25

Принтер HP LJ1300 не выходит в готовность
Мигает желтый индикатор после включения принтера. Что делалось: Ставился новый картридж, проверка всех датчиков, перебирали полностью...

код, определяющий готовность диска к работе не работает
Дело такое: Иметтся несколько сетевых дисков, один из них Z: Мне нужно скопировать с него себе на комп какой то файл. Перед эти...

СМА Bosch WLF 20180 OE/01, уходит в готовность
Просьба проверить прошивку.Фишка вот в чем,после запуска на любом режиме в момент когда должен вкл.двигатель машинка переходит в готовность...

СМА BOSCH WOL2050EU SN485090222627000180, При запуске мигает или вообще не горит индикатор "готовность"
Добрый день. С неделю назад попала ко мне в ремонт выше указанная СМ в ремонт с симптомами - "не включается". в процессе...

Как определить имя открываемого в системе файла, как антивирус
Как опредилить имя открываемого в системе фала как антивирусs&


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

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

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru