Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как проверить занят ли файл или нет? [D6, Win95/98, Win2k]


Jack ©   (2003-08-11 14:52:00) 

Монитор каталогов должн при появлении файлов передовать их на обработку. Но при использовании функций FindFirstChangeNotification/FindNextChangeNotification невозможно определить событие, когда файл полностью скопирован в директорию. Как можно решить эту проблему?


Verg   (2003-08-12 08:56:00) [1]

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

if renamefile(fname, fname) then файл записан полностью else нет.


Jack   (2003-08-11 16:52:00) [2]

В том то и дело... Программа будет работать, вероятнее всего, под Win98.
Ну чтож, будем пробовать...


panov   (2003-08-11 16:36:00) [3]

Можно пытаться открывать файл для проверки в эксклюзивном режиме, но это не 100% метод.


panov   (2003-08-11 16:32:00) [4]

К сожалению, таким способом не сможешь определит завершение записи файла.

Попробуй воспользоваться ReadDirectoryChangesW, но только в ОС не ниже WinNT...


Jack   (2003-08-11 15:55:00) [5]

Не правильно описал ситуацию. В директорию может копироваться несколько файлов одновременно и из разных источников. GhangeNotification не возвращает имени файла - источника события. Поэтому просматриваю каталог с помощью FindFirst/FindNext и получаю список файлов, среди которых есть еще открытые. Как открытые файлы можно исключить из списка?


panov   (2003-08-11 15:06:00) [6]

FILE_NOTIFY_CHANGE_LAST_WRITE
Any change to the last write-time of files in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change to the last write-time only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed.

Пробовал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо