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

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

Проверка файла [D7, Win2k]


Kniaz ©   (2004-09-24 12:21:00) 

Есть файл который нужно скопировать функцией CopyFile. Эта функция никак не проверяет работает ли с файлом (который нужно скопировать) кто нибудь (приложение или ...). Она берёт и тупо копирует. а если в это время в файл (который нужно скопировать) кто-то пишет или что-то делает с данными, то, получается функция CopyFile скопирует либо не всю инфу, либо данные которые в последствии из файла источника будут удалены. Так вот. Каким образом проверить, работает ли кто нибуть с тем файлом который  функция CopyFile пытается скопировать.


Anatoly Podgoretsky   (2004-09-24 16:12:00) [1]

КаПиБаРа ©   (24.09.04 13:11) [8]
Проверка на размер нестабильна, истинный размер будет после закрытия файла, а закрытия может и не быть.

panov ©   (24.09.04 14:20) [13]
Только не блокнот, он не держит файл открытым, но суть понятна, та что выше.

Не надо даже и пытаться найти решение, его просто нет, надо просто копировать файлы.


clickmaker   (2004-09-24 14:47:00) [2]


> [14] Kniaz ©   (24.09.04 14:41)

FindFirstFile()


Kniaz   (2004-09-24 14:41:00) [3]

Хочу получить размер файла при помощи функции getfileSize, а в ней надо указывать файловый дескриптор, который я могу получить только при открытии файла. Но мне нельзя открывать файл. Как быть??????


panov   (2004-09-24 14:20:00) [4]

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

Задача:
Найти решение для поставленно автором топика вопроса.


Lin7   (2004-09-24 14:15:00) [5]


> КаПиБаРа ©   (24.09.04 12:52) [5]
> Lin7   (24.09.04 12:48) [3]
> Что очень поможет при копировании с сетевых ресурсов :)

Мдя.. Не подумал... :))


[lamer]Barmaglot   (2004-09-24 13:37:00) [6]

FAQ?

http://delphibase.endimus.com/?action=viewtopic&topic=mathcode


КаПиБаРа   (2004-09-24 13:29:00) [7]

Kniaz ©   (24.09.04 13:17) [9]
www.yandex.ru
Контрольная сумма файла

=======================
Орлы летают одиноко,
бараны пасутся стадами.
=======================


Kniaz   (2004-09-24 13:17:00) [8]

А какой функцией можно получить контрольную сумму и что это такое??????????????????????77777


КаПиБаРа   (2004-09-24 13:11:00) [9]

Anatoly Podgoretsky ©   (24.09.04 13:03) [6]
Зависит от того каким образом происходит изменение файла. Для 300 метрового файла, в конец которого переодически добавляется информация я в первую очередь выберу проверку размера, а не контрольной суммы.
Вообщем выбор способа зависит от конкретной задачи.

======================================
Уничтожить тараканов нельзя,
но можно сделать их жизнь невыносимой!
Шендерович
======================================


Anatoly Podgoretsky   (2004-09-24 13:07:00) [10]

Kniaz ©   (24.09.04 12:21)  
Раз программа разрешает открытие на чтение, то значит его разрешено копировать. Те которые не разрешено копировать, скопированы не будут.


Anatoly Podgoretsky   (2004-09-24 13:03:00) [11]

clickmaker ©   (24.09.04 12:42) [2]
А в программе стоит ShareDenyNone и плюс как ты заметил еще и временная проблема, поскольку операция не атомарная

КаПиБаРа ©   (24.09.04 12:48) [4]
нахудой конец размер, дату изменения, а не контрольную сумму файла, которое должно быть первейшим, но существует риск зациклиться, например для логов, баз данных и т.д. :-).


КаПиБаРа   (2004-09-24 12:52:00) [12]

Lin7   (24.09.04 12:48) [3]
Что очень поможет при копировании с сетевых ресурсов :)

PS: При копировании файла с локальных источников можно воспользоваться функциями "слежения за файловой системой" как они называются не помню.

===============================
Жизнь вынуждает нас многие вещи
делать добровольно.
===============================


Lin7   (2004-09-24 12:48:00) [13]


> clickmaker ©   (24.09.04 12:42) [2]

... и на время проверки установить высокий приоритет для своего процесса.


КаПиБаРа   (2004-09-24 12:48:00) [14]

Kniaz ©   (24.09.04 12:21)
1. Перед копированием запоминаешь размер, дату изменения, нахудой конец контрольную сумму файла.
После копирования сравниваешь с текущими параметрами.
Если не совпало - копируй заново.

2. Не использовать copyfile, т.е. открывать файл монопольно и копировать в рукопашную :)

=====================================
Хороших людей много! Полезных мало...
=====================================


clickmaker   (2004-09-24 12:42:00) [15]

С большой долей вероятности можно.
Попробовать открыть его для записи перед копированием. Если CreateFile вернет ERROR_SHARING_VIOLATION, то занят.
Но учти, что его могут занять в промежуток между проверкой и собссно процессом копирования


panov   (2004-09-24 12:33:00) [16]

>Kniaz ©   (24.09.04 12:21)
...Каким образом проверить,...

Нет такой возможности.


Наверх

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