![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как проверить занят ли файл или нет? [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.
Пробовал?