powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужны все файлы
5 сообщений из 30, страница 2 из 2
Нужны все файлы
    #35340797
bodrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T bodroxОригинально :). Спасибо. Просто я посчитал, что надо поправить список файлов и папок в xdir'е собираемые.
Если бы ты его поправил, то по this.input_path+this.axdir(k,1) получалось бы имя несуществующего файла.Так и выходило. Сейчас тока интересный случай - добавить в архив весь диск.... Весёлая структура получается :). Но это уже мелочи :).
...
Рейтинг: 0 / 0
Нужны все файлы
    #35340906
bodrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, два метода - ZIPFILE для добавления в архив целых дисков :) и файлов по маске, и собсна ZIPDIR, изменённый под чутким руководством Dima T , который добавляет в архив сами папки с их содержимым.
Всем спасибо. Автору на фоксклабе вышлю изменённый класс.
--------------
Новичок в VFOX
...
Рейтинг: 0 / 0
Нужны все файлы
    #35340949
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bodroxВобщем, два метода - ZIPFILE для добавления в архив целых дисков :) ...
Зачем два? Хочешь чтобы вызывающий голову ломал когда какой метод вызывать?

Сделай проверку что это корень диска и ничего не добавляй в этом случае. Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
if rat('\', this.input_path,  2 ) !=  0 
   lcFolder = substr(this.input_path, rat('\', this.input_path,  2 ) +  1 )
else
   lcFolder = ''
endif

for ...
	this.xzip(this.input_path+this.axdir(k, 1 ), ;
		lcFolder + this.axdir(k, 1 ), ;
		this.axdir(k, 2 ), ;
		this.axdir(k, 3 ), ;
		this.axdir(k, 4 ), ;
		this.axdir(k, 5 ))

По-хорошему надо добавить классу свойство "Добавлять родительскую папку в архив", по умолчанию его ставить в .F., чтобы обновленная версия класса работала аналогично старой (а то кто-нибудь кто старую пользует обновит и прилипнет).
А в методе ZipDir() уже проверять и свойство и то что корень диска передали.
...
Рейтинг: 0 / 0
Нужны все файлы
    #35340959
bodrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T , собсна да, что-то не подумал об этом.
--------------
Новичок в VFOX
...
Рейтинг: 0 / 0
Нужны все файлы
    #35342418
bodrox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем, сделал мульти-маску через рекурсивный вызов метода ZIPDIR()
В .ZIPDIR():
После первого IF..ENDIF:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
llMULTIMASK = .F.

*Если мульти-маска (MASK1[|MASK2[|MASK3[|..]]])
IF AT('|',THIS.input_mask, 1 )!= 0 
	lcINPUT_MASK = SUBSTR(THIS.input_mask,AT('|',THIS.input_mask)+ 1 )
	THIS.input_mask = retrive(THIS.input_mask, 1 )
	llMULTIMASK = .T.
ENDIF

И в самом конце метода:
Код: plaintext
1.
2.
3.
4.
*Если мульти-маска (MASK1[|MASK2[|MASK3[|..]]]) уходим в рекурсию
IF llMULTIMASK
	THIS.input_mask = lcINPUT_MASK
	THIS.zipdir()
ENDIF

retrive.prg (упрощённый вариант; можно добавить различные "защиты на дурака"):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
PARAMETERS _str, _pos
lnTemp1 = AT('|' ,lcStr,lnPos)
lnPos = lnPos -  1 
IF lnTemp1 !=  0 
	IF lnPos =  0 
		lcRet = ALLTRIM(SUBSTR(lcStr, 1 ,lnTemp1 - 1 ))
	ELSE
		lnTemp2 = AT('|' ,lcStr,lnPos)
		lcRet = ALLTRIM(SUBSTR(lcStr,lnTemp2 +  1 ,lnTemp1 - lnTemp2- 1 ))
	ENDIF
ELSE
	IF lnPos >  0 
		lnTemp2 = AT('|' ,lcStr,lnPos)
		lcRet = ALLTRIM(SUBSTR(lcStr,lnTemp2+ 1 ))
	ENDIF
ENDIF

Сделано для того, чтобы маску можно было задать так:
this.input_mask = 'AUTOEXEC.BAT|boot.ini|CONFIG.SYS'
--------------
Новичок в VFOX
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужны все файлы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]