Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1095945000
kukuikar
2004-09-23 17:10
2004.10.10
Warning


14-1095411345
SPeller
2004-09-17 12:55
2004.10.10
Сколько стоит сайт построить?


14-1096000394
SiJack
2004-09-24 08:33
2004.10.10
Доброе утро!!! Не подскажете чем


6-1091542437
Николай
2004-08-03 18:13
2004.10.10
Подскажите, как к сообщению в TIdSMTP приложить файл


4-1094046359
Dec
2004-09-01 17:45
2004.10.10
Создать окно, содержащее CheckBox c использованием API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский