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

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

Доступ к файлу


mahab ©   (2009-03-03 18:43:00) 

Привет. "Запил" такой:Отслеживаю изменения в каталогах используя ф-ю ReadDirectoryChangesW с фильтром FILE_NOTIFY_CHANGE_LAST_WRITE, т.к. по идее это сообщение появится после того, как программа, которая записывает в него закроет его (по крайней мере в статье Александра Панова  - Изучение простейших приемов работы с файлами и потоками на примере программы «Монитор каталогов» написано, что FILE_NOTIFY_CHANGE_SIZE сигнализирует об изменении размеров файлов. Операционная система определяет, что размер файла изменился, только если он закрыт.) Но к моему великому сожалению, получить доступ к этому файлу после получения сообщения у меня не получается - IDE говорит: "ОН ЗАНЯТ ДРУЖЕ!".
Если я не прав, пожалуйста скажите в чем. Я решил пойти по др. пути и дождаться пока сторонняя программа не освободит его. Но хочу сделать это с помощью WaitForSingleObject, но не знаю какой объект взять сигнальным и вообще возможно ли это. Иммитирую запись файла Paintом но какая программа будет записывать файлы в будующем не знаю, поэтому передать её хендл не могу.


Riply   (2009-03-04 07:54:00) [1]

> [2] mahab ©   (03.03.09 20:47)
> Мне кажется это то же самое только др. словами (и еще по английски :)).

Что-то мне не удалось в приведенной Rouse_`ом цитате, найти "размер файла изменился, только если он закрыт".


mmelik   (2009-03-04 01:37:00) [2]

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

Второй вариант: вам никто не мешает скопировать нужный файл в другое место и там получить к нему доступ.


mahab   (2009-03-03 21:30:00) [3]

Во всех режимах перепробовал - не дает доступа. Да и фиг с ним. А вот насчет WaitForSingleObject что-нибудь можно сделать?


Игорь Шевченко   (2009-03-03 21:24:00) [4]

Я бы пытался открыть файл в режиме запрета совместного доступа на запись. Не получилось - ждал бы и снова пытался.


mahab   (2009-03-03 20:47:00) [5]

Мне кажется это то же самое только др. словами (и еще по английски :)). Если нет пожалуйста поясни


Rouse_   (2009-03-03 20:41:00) [6]


> написано, что FILE_NOTIFY_CHANGE_SIZE сигнализирует об изменении
> размеров файлов. Операционная система определяет, что размер
> файла изменился, только если он закрыт

MSDN думает о данном флаге иначе :)

Any file-size change in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change in file size 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.


Наверх

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