Форум » FiveWin » Архивация » Ответить

Архивация

MMK: aDir := Directory((spath+"*.dbf") ) Aeval( aDir, {|a| aadd( aRz, spath+a[1]) }) HB_ZIPFILE( filzip, arz,8,,,,,,.t. ) Если базы открыты монопольно архивация не выполняется. Как сделать правильно?

Ответов - 9

Dima: Открывать в Shared ;) Или перед архивацией проверять все базы на предмет монопольного открытия и если такие базы есть то вываливать месагу , что архивация не возможна и тд и тп

MMK: Dima пишет: Открывать в Shared ;) Да с этим понятно :) Интерес в другом - архивировать не изменять. Почему так функция написана? или я ее не так использую?

Dima: Вероятно причины те же что и в примере ниже :) use test exclusive new copy file test.dbf to test1.dbf // не сработает close all use test shared new copy file test.dbf to test2.dbf // сработает ;) close all Можешь предложить способ как это обойти ? Если сможешь тогда по всей вероятности и сможешь решить проблему с архивацией :)


Pasha: см.zipplatform.cpp return _tsopen(lpszFileName, iMode, iShareMode, S_IREAD | S_IWRITE /*required only when O_CREAT mode*/); Зачем-то стоит S_IREAD | S_IWRITE для всех случаев. Хотя эта функция используется для открытия как самого архива, так и архивируемых файлов.

MMK: Dima пишет: Можешь предложить способ как это обойти ? Так надо попросить "тых хлопцев" чтоб они эти функции переделали :)))

Dima: MMK

Andrey: MMK пишет: Почему так функция написана? или я ее не так использую? MMK пишет: Так надо попросить "тых хлопцев" чтоб они эти функции переделали :))) Те хлопцы должны переписать сначала ДОС, а потом под Windows ДОС-вский эмулятор !!! Попробуй открыть базы монопольно, а потом из-под Far'а или "Командера" любого - заархивировать эти базы RAR'ом или ZIP'ом !!! Остается только ОДИН способ: use test shared new !!!

SergeJa: а вроде есть ещё способ. брать file-хэндл открытого DBF (вполне доступен) и использовать его вместо tsopen (разумеется, сохранив offset)

Loach: Здравствуйте Вам! А ежели (не мудрствуя) так: if !lIsDir( spath+'ARHIV' ) if !lMkDir( spath+'ARHIV' ) MsgAlert('Не могу создать папку для архива ','Ошибка!') endif endif apath:=spath+'ARHIV\' aDir := Directory((spath+"*.dbf") ) for each i in aDir copy file (spath+i[1]) to (apath+i[1]) next for each i in aDir if !file(apath+i[1]) select(left(i[1],at('.dbf',i[1])-1)) copy to (apath+i[1]) for .t. endif next Aeval( aDir, {|a| aadd( aRz, apath+a[1]) }) HB_ZIPFILE( filzip, arz,8,,,,,,.t. ) Ну ето конечно если базы открыты Вами, если нет, - то IMHO открытие общих баз на сети кем-то в ексклюзиве, ето... не корошо... Пы.Сы. Привет, KMM...



полная версия страницы