Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.15;
Скачать: CL | DM;

Вниз

Как узнать, завершено ли копирование файла?   Найти похожие ветки 

 
SSCha   (2003-03-11 15:52) [0]

Во входной каталог сторонняя программа периодически копирует файлы, которые мне необходимо считать и удалить. Как узнать, завершено ли копирование конкретного файла?


 
Юрий Зотов ©   (2003-03-11 16:17) [1]

См. FindFirst/Next/CloseChangeNotification.
Под линейкой NT дополнительно можно использовать ReadDirectoryChanges (если потребуется).


 
SSCha   (2003-03-11 17:13) [2]

Юрию Зотову
FindFirst найдет файл независимо от того завершилось ли его копирование или нет. В TSearchRec ( включая FindData: TWin32FindData;) об этом тоже ни слова. Если начинаю обрабатывать файл, копирование которого не завершено - лезут ошибки. Что за функция ChangeNotification? Где лежит, что умеет? Описания не нашел.
Странно - казалось бы, задача должна быть довольно распространенная, но 2 дня пытался найти хоть что нибудь в инете - ничего. То ли искать не умею, то ли ответ прост и не обсуждается.



 
Anatoly Podgoretsky ©   (2003-03-11 17:17) [3]

Одназначно определить закончилось копирование или нет невозможнл.
А повлиять на другую программу можно как нибудь.


 
SSCha   (2003-03-11 17:29) [4]

Повлиять на другую программу нельзя. Возможен вариант, когда файлы кладет администратор "ручками".
Может возможен кокой-нибудь иной подход, по коственным признакам? Если кто сталкивался, помогите.


 
Юрий Зотов ©   (2003-03-12 00:07) [5]

> SSCha (11.03.03 17:13)

Расшифровываю:

FindFirstChangeNotification
FindNextChangeNotification
FindCloseChangeNotification

К поиску файлов никакого отношения не имеют. Позволяют получать уведомления о некоторых файловых операциях. Использовать надо в дополнительном потоке совместно с WaitForSingleObject. Описание см. в справке API.


 
SSCha   (2003-03-12 12:07) [6]


> Юрий Зотов


Спасибо. Похоже, это то что нужно.


 
SSCha   (2003-03-13 14:53) [7]


> Юрий Зотов

Воспользовался Вашим советом. В качестве фильтра указал только FILE_NOTIFY_CHANGE_SIZE, поскольку в описании сказано, что обнаружение изменения размера происходит только, если файл записан на диск. Но на практике уведомление приходит, когда файл только начинает копироваться. Сделал файл побольше, положил в нужный каталог - копирование еще не завершилось, а программа уже выбросила сообщение "Не могу открыть файл". Как бы мне отследить завершение изменений, а не их начало?
И еще не два странных момента:
1. не всегда срабатывает - иногда кладу файл, и ничего не происходит.
2. если в каталоге уже был файл, я его удаляю - уведомление об изменении размера не приходит. Почему?




 
Suntechnic ©   (2003-03-13 15:28) [8]

>SSCha
Тебе ж сказали что однозначно определить завершение копирования файла под Win 2000 невозможно (для Win 98 вроде можно, но я лично не проверял). Тут около года назад по этому поводу здоровенный флейм был с тестами и примерами. Об его итогах тебе уже сообщили.


 
Юрий Зотов ©   (2003-03-13 21:46) [9]

Под 9х уведомление приходит в момент закрытия файла (видимо, это то, что Вам и нужно). Под NT может приходить в момент его изменения (то есть, при каждой модификации, еще до закрытия). Но под NT может помочь дополнительная информация от ReadDirectoryChangesW, посмотрите ее в справке.

Если все это не поможет - см. исходники FileMon на www.sysinternals.com. Там динамически грузится свой драйвер и можно отследить процесс на более низком уровне.


 
Юрий Зотов ©   (2003-03-13 23:36) [10]

Еще вариант для NT (хотя и не слишком хороший, потому что именно по косвенным признакам) - уведомления FILE_NOTIFY_CHANGE_SIZE не приходят в течение заданного времени (проставляется в WaitForSingleObject и результат проверяется на WAIT_TIMEOUT). При надлежещем выборе периода ожидания это означает, что копирование файла закончено.



Страницы: 1 вся ветка

Текущий архив: 2003.05.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-46987
phisy1
2003-04-24 17:37
2003.05.15
инсталляция delphix в delphi5


1-46839
damx
2003-05-03 12:32
2003.05.15
File, ListBox......


3-46663
Nick-From
2003-04-25 00:18
2003.05.15
Как можно сохранить (конвертнуть) БД чтоб


14-46946
Anatoly Podgoretsky
2003-04-25 17:57
2003.05.15
Auto Complite В ыеб формах


3-46629
Devourer
2003-04-24 12:18
2003.05.15
Простой запрос