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

Вниз

Проверка файла   Найти похожие ветки 

 
Kniaz ©   (2004-09-24 12:21) [0]

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


 
panov ©   (2004-09-24 12:33) [1]

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

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


 
clickmaker ©   (2004-09-24 12:42) [2]

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


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


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

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


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

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

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

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


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

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

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

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


 
Anatoly Podgoretsky ©   (2004-09-24 13:03) [6]

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

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


 
Anatoly Podgoretsky ©   (2004-09-24 13:07) [7]

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


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

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

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


 
Kniaz ©   (2004-09-24 13:17) [9]

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


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

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

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


 
[lamer]Barmaglot ©   (2004-09-24 13:37) [11]

FAQ?

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


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


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

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


 
panov ©   (2004-09-24 14:20) [13]

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

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


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

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


 
clickmaker ©   (2004-09-24 14:47) [15]


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

FindFirstFile()


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

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

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

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



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

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

Наверх




Память: 0.5 MB
Время: 0.032 c
6-1091103983
Mental_Ray
2004-07-29 16:26
2004.10.10
Как дозвониться до провайдера? :)


4-1093933617
alex732
2004-08-31 10:26
2004.10.10
не определяется хендл дочернего окна


3-1094990342
Snip
2004-09-12 15:59
2004.10.10
IB и Boolean (TDBCheckBox)


14-1095768383
SergeySEM
2004-09-21 16:06
2004.10.10
Какое сегодня число


8-1090322929
Popovich A.
2004-07-20 15:28
2004.10.10
Последовательный просмотр картинок