![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| Slash_from_Rjazan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.5.2007 Репутация: нет Всего: нет |
Проблема вот в чем:
Нужно написать программу которая копирует файлы из сетевой папки на локальный компьютер, НО эти файлы являются dbf файлами в которые постоянно пишутся данные (на удаленном компьютере программа работает через BDE) и при попытке скопировать эти файлы с помощью CopyFile(CopyFileEx) у той программы вываливается сообщение "Table is busy.". Вопрос: какой ОПТИМАЛЬНЫЙ способ скопировать эти файлы так чтобы они не блокировались? PS 1. Знаю, что это возможно, т.к. когда эти файлы копируешь через TotalComander, то все OK. 2. Знаю два способа 1)Используя BDE открыть эти файлы как БД и потом считать данные в целевые файлы 2)Используя потоки написать свою процедуру копирования (не факт, что будет работать) но предполагаю, что есть метод проще и все уже написано до нас... 3. Предваряя вопросы типа "А зачем это нужно" Пишу программу, которая на основе тех БД формирует некоторую статистическую информацию, обработка данных достаточно сложная, поэтому при работе через сеть все происходит ОЧЕНЬ медленно, а при работе с локальными файлами проблем с быстродействием нет. Других вариантов по сбору данных, кроме как в dbf нет. Заранее благодарен за помощь. |
|||
|
||||
| Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 18 Всего: 29 |
Открой файл на чтение и читай из него кусками. Эти куски сохраняй в новый файл.
|
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
еще лучше через
var ST:TFileStream; ... ST:=TFileStream.create('Файл.дбф', fmShareDenyNone); .... пользуем ST вроде не должно блокировать |
|||
|
||||
| BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: 3 Всего: 18 |
Разница? -------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
| Virtuals |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 476 Регистрация: 27.11.2006 Репутация: 4 Всего: 11 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
BaD_SeCt0R, открыть для чтения еше не значит что другие процессы туда смогут писать. fmShareDenyNone - разрешает совместное использование файла несколькими процессами.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| BaD_SeCt0R |
|
|||
![]() Lazy Coder ![]() ![]() Профиль Группа: Участник Сообщений: 432 Регистрация: 9.10.2006 Где: Анапа Репутация: 3 Всего: 18 |
Ну уж писать в копируемый файл, я думаю, разрешать не надо -------------------- Кто владеет информацией - владеет миром. (С) Френсис Бэкон. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
Не факт. Это если это дозапись в конец, то ничего страшного быть не должно. Просто копия не будет содержать самых последних данных. Например, если делается бэкап, то это нормально. Все зависит от того что там и как это синхронизируется с другими данными. Задачи бывают разные, хотя в целом ты прав, чтение с записью это опасная операция. Обычно при записи доступ на чтение блокируется. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Slash_from_Rjazan |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 11.5.2007 Репутация: нет Всего: нет |
Спасибо в итоге сделал вот такую функцию -- ее работоспособность меня вполен устраивает:
|
|||
|
||||
| EvilsInterrupt |
|
|||
|
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 1 Всего: 9 |
Slash_from_Rjazan, Раз радует, значит хорошо! ;) Можно же до бесконечности улучшать, но ведь когда-то и останавливаться надо! ;) Но я бы сделал на WinAPI, ну не люблю я юзать компоненты без лишней надобности ;)
|
|||
|
||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |