Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
ВнизПроверка файла Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.033 c