powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как управлять содержимым zip?
23 сообщений из 23, страница 1 из 1
Как управлять содержимым zip?
    #35961432
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осваиваю использование zip-архива в РВ10.5.
Как программно добавить в архив новые файлы и удалить из него?
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35962082
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неплохие ActiveX Control
Из ихней коллекции в свое время пользовался PowerTCP остался доволен, правда Buy It, но попробовать можно, если устраивает то и порыться в инете.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35962139
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISКак программно добавить в архив новые файлы и удалить из него?
// -----------------------------------------------------------------------------
// SCRIPT: n_zlib.of_ImportFile
//
// PURPOSE: This function will add a new file to the zip archive file .
//
// ARGUMENTS: aul_unzfile - Handle of currently open zip archive
// as_filename - Name of file being added to archive
// as_nameinzip - Name of the file within the zip file
//
// RETURN: 0=Success

Не ленимся читать функции в объектах в Вашем случае это n_zip
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35962254
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATCAISКак программно добавить в архив новые файлы и удалить из него?
// -----------------------------------------------------------------------------
// SCRIPT: n_zlib.of_ImportFile
//
// PURPOSE: This function will add a new file to the zip archive file .
//
// ARGUMENTS: aul_unzfile - Handle of currently open zip archive
// as_filename - Name of file being added to archive
// as_nameinzip - Name of the file within the zip file
//
// RETURN: 0=Success

Не ленимся читать функции в объектах в Вашем случае это n_zip
Да вроде и не поленился, и почитал перед тем как спрашивать, и покрутил и так и сяк. :(
Например, так пробовал добавить файлы в архив:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
If is_zipfile = "" Then Return

n_getopenfilename ln_ofn
ULong 	lul_zipFile
Integer 	li_rc, li_file, li_count
String 	ls_title, ls_fname, ls_filter, ls_pathname[], ls_filename[]

// open zipfile
lul_zipFile = gn_zlib.of_zipOpen(is_zipfile)

If lul_zipFile >  0  Then
	// get name of files to add
	ls_title = "Add Files to Archive"
	ls_filter = "All Files (*.*), *.*"
	li_rc = ln_ofn.of_GetOpenFileName(Handle(this), &
                               ls_title, ls_pathname, ls_filename, ls_filter)
	li_count = UpperBound(ls_pathname)
	FOR li_file =  1  TO li_count
		gn_zlib.of_ImportFile(lul_zipFile, &
                                ls_pathname[li_file], ls_filename[li_file])
	NEXT
	// close zipfile
	gn_zlib.of_zipClose(lul_zipFile, "")
	// get directory of zipfile
	dw_info.Event ue_populate()
End If
Но максимум что получилось - это вставить файлы в архив, но при этом все остальные файлы из архива куда-то пропадают; а просто удалить вообще не нашел как сделать.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35962692
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
Да вроде и не поленился, и почитал перед тем как спрашивать.
Прошу прощения. Ну тогда это к разработчикам, а как вариант, распаковать , добавить или удалить, упаковать. Могу сбросить то, что предлагал выше (не триал), но сам архивами не занимался и ранняя версия, не уверен, что в ранней версии есть Add и Del. Одно маленькое неудобство надо регистрировать ActivX, но это не проблема создать батник или инсталяшки всего проекта. Отпишитесь, если надо сброшу Вам на почту.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35963296
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC ,
Спасибо за предложения и совет, но пока попробую еще это поковырять.
Вариант с ActivX не совсем подходит, т.к. думаю что не у всякого пользователя могут быть права на его регистрацию.
Интерес в том чтобы не распаковывать архив, а вставлять в него файлы и удалять из него динамически. Мысль использовать как хранилище информации.
Получать (минуя распаковку в файл) в Blob получается, к тому же есть пароль доступа. Всё ОК. Можно использовать, но задача в том чтобы ещё можно было корректировать эту инфу и снова возвращать в архив, а то и опять же создавать новый файл в архиве и удалять старый.

Может есть у кого-то по этой теме ещё мысли?
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35963336
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS ,
Попробовал свежую ActiveX от Dart, нет реализации добавления в существующий архив и удаление из него. Так, что и не меняйте шило на мыло.
Удачи.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35963518
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISНапример, так пробовал добавить файлы в архив:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
If is_zipfile = "" Then Return

n_getopenfilename ln_ofn
ULong 	lul_zipFile
Integer 	li_rc, li_file, li_count
String 	ls_title, ls_fname, ls_filter, ls_pathname[], ls_filename[]

// open zipfile
lul_zipFile = gn_zlib.of_zipOpen(is_zipfile)

If lul_zipFile >  0  Then
	// get name of files to add
	ls_title = "Add Files to Archive"
	ls_filter = "All Files (*.*), *.*"
	li_rc = ln_ofn.of_GetOpenFileName(Handle(this), &
                               ls_title, ls_pathname, ls_filename, ls_filter)
	li_count = UpperBound(ls_pathname)
	FOR li_file =  1  TO li_count
		gn_zlib.of_ImportFile(lul_zipFile, &
                                ls_pathname[li_file], ls_filename[li_file])
	NEXT
	// close zipfile
	gn_zlib.of_zipClose(lul_zipFile, "")
	// get directory of zipfile
	dw_info.Event ue_populate()
End If
Но максимум что получилось - это вставить файлы в архив, но при этом все остальные файлы из архива куда-то пропадают; а просто удалить вообще не нашел как сделать.
у меня почти тоже самое, вызов gn_zlib.of_ImportFile идентичен... нормально в архив добавляются файлы, и ничего там не удаляется
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964220
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS и удалять старый.
Может есть у кого-то по этой теме ещё мысли?

AIS , по моему не светит, можешь проверить данной утилитой , все функции которые экспортируются zlibwapi.dll (см.Exports from zlibwapi.dll), похожей на удаление не увидел, ориентировался на название конечно. Но мои сомнения за догму не принимай может и ошибаюсь.
Удачи.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964257
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoR
у меня почти тоже самое, вызов gn_zlib.of_ImportFile идентичен... нормально в архив добавляются файлы, и ничего там не удаляется
8(
А можно скрипт? Ведь есть же отличия какие-то. У меня удаляет всё из архива и вставляет, то что хочу. А хочется чтобы только добавляло.

P.S. Уже есть оптимизм - ведь у Вас работает. 8)
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964560
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS ,
Самого заинтересовала ваша тема по архивированию, перепробовал кучу вариантов и пришел к выводу, что лучше чем управлять архивами самими утилитами архивирования я не нашел (умозаключение автора), в данном случае использую 7z.exe, позволяет делать все , что Вы желали, но возникла проблема с появлением лишних окошек , как-то не красиво и вот в инете нашел утилитку nircmd.exe, при запуске просит установиться в каталог с виндой, можно и ОК, а можно и не делать этого тогда заранее указывать путь для её запуска.
Вот как я реализовал добавление файла в архив их PB.

Код: plaintext
1.
2.
3.
String ls_run, ls_exec
ls_run = '7z.exe a  d:\max.zip d:\PowerBuild_Work\Zip\Net.exe'
ls_exec = 'nircmdc.exe  exec hide    '
Run(ls_exec + ls_run )

И ни каких окошек.
В архив d:\max.zip добавляется d:\PowerBuild_Work\Zip\Net.exe
Бросить 3 файла на клиента в папку App не сложно.
Вам все в архиве бросил на почту.
Удачи.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964564
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, опечатка.
Правильно так:
Код: plaintext
ls_exec = 'nircmd.exe  exec hide    '
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964588
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно воспользоваться OLE компонентой расширения 1С raruslib.dll в которой реализован функционал работы с zip архивами, но насколько это лицинзионно чисто - я не в курсе.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964714
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лет 8 назад я пользовался Xceed Zip Compression Library , работало всё как часы, но денежки...
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35964743
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC ,
За почту спасибо, получил. Буду пробывать, изучать.
Тема действительно интересная особенно когда сталкиваешься с БД типа Firebird - бесплатная, но незащищенная, вот и приходится искать варианты.
Да и вообще, хранить в архиве удобнее то, что не для всех предназначено.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35965377
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIS
8(
А можно скрипт? Ведь есть же отличия какие-то. У меня удаляет всё из архива и вставляет, то что хочу. А хочется чтобы только добавляло.

P.S. Уже есть оптимизм - ведь у Вас работает. 8)
найдите в n_zlib функцию of_zipopen
там есть
Код: plaintext
lul_zipFile = zipOpen(as_filename,  0 )
замените 0 на 2, ну или новую аналогичную функцию там создайте с 2
и все будет добавляться в архив, не затирая внутренности
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35965817
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoR ,
ОГРОМНОЕ СПАСИБО. Как всё было просто. 8)
А Вы случаем "удадалить файл" из архива не знаете как? Хотя и это уже практически то, что нужно. Но вот если бы ещё удалять красиво.
А где можно вообще почитать про "переменные/константы" для этого zip? Думаю, что есть ещё скрытые возможности. :)
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35966583
VanoR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AISА Вы случаем "удадалить файл" из архива не знаете как? не знаю
AISА где можно вообще почитать про "переменные/константы" для этого zip? Думаю, что есть ещё скрытые возможности. :)у функции zipOpen входящая переменная называется append, говорит о себе все... по остальным не знаю где искать, методом тыка можно попробовать :)
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #35967810
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VanoRметодом тыка можно попробовать :)
Зачем методом тыка?
Скачать сам ZLIB (http://www.zlib.net/) и там в исходниках прочитать описания функций.
Например ф-и по работе с форматом ZIP наверняка взяты из модуля contrib/minizip в ZLIBе.
Смотрите в приложенном файле zip.h и unzip.h
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #36218843
cez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cez
Гость
Коллеги.

Этот zlib выдает ошибку -102 при чтении текущего файла из архива.
при таком коде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
long i, ll_ret, ll_zip
unz_fileinfo lstr_info
string ls_file, ls_comment
ulong lul_filesize, lul_commentsize
ulong lul_extra, lul_extrasize
blob lblob_data
ulong lul_datasize

lul_filesize =  256 
ls_file  = Space(lul_filesize)
lul_commentsize  =  512 
ls_comment   = Space(lul_commentsize)

ll_zip = unzOpen(as_zip)

if ll_zip<= 0  then 
	return ll_zip
else
	ll_ret = unzGoToFirstFile(ll_zip)
	
	i =  0 
	do while ll_ret= 0 
		i += 1 
		
		ll_ret = unzGetCurrentFileInfo(ll_zip, lstr_info, ls_file, lul_filesize, lul_extra, lul_extrasize, 
                                                        ls_comment, lul_commentsize)
		
		this.is_files[i] = as_dir + '\' + ls_file
		
		if ll_ret<> 0  then 
			i = ll_ret
			exit
		end if
		
		lul_datasize = lstr_info.uncompressed_size
		lblob_data = blob(space(lul_datasize))

		ll_ret = unzReadCurrentFile(ll_zip, lblob_data, lul_datasize)
		
		if ll_ret<> 0  then 
			i = ll_ret
			exit
		end if
		
		of_writefile(this.is_files[i], lblob_data)
		
		ll_ret = unzGoToNextFile(ll_zip)
		
		if ll_ret<> 0  then 
			i = ll_ret
			exit
		end if
	loop
	
	unzClose(ll_zip)
end if

return i
посоветуйте что нибудь
размер файла маленький 1052
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #36218969
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cezЭтот zlib выдает ошибку -102 при чтении текущего файла из архива.
Вообще код -102 - это неверные параметры функции. Возможно не хватает какого-то вызова перед этой функцией.

Проблема с любыми архивами или только с одним каким-то? С любыми файлами в архиве или только с одним каким-то? Если проблема с конкретными данными, то пришлите их сюда - может кто-то поможет.

Какая версия PB? Если юникодная то библиотека ZLIB тоже должна быть юникодная.
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #36219161
cez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cez
Гость
Народ.
Всем спасибо, писать надо было вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
long i, ll_ret, ll_zip, ll_size
unz_fileinfo lstr_info
string ls_file, ls_comment
ulong lul_filesize, lul_commentsize
ulong lul_extra, lul_extrasize
blob lblob_data

lul_filesize =  256 
ls_file  = Space(lul_filesize)

lul_commentsize  =  512 
ls_comment   = Space(lul_commentsize)

ll_zip = unzOpen(as_zip)

if ll_zip<= 0  then 
	return ll_zip
else
	ll_ret = unzGoToFirstFile(ll_zip)
	
	i =  0 
	do while ll_ret= 0 
		i += 1 
		
		ll_ret = unzGetCurrentFileInfo(ll_zip, lstr_info, ls_file, lul_filesize, lul_extra, lul_extrasize, ls_comment, lul_commentsize)
		
		this.is_files[i] = as_dir + '\' + ls_file
		
		if ll_ret< 0  then 
			i = ll_ret
			exit
		end if
		
		lblob_data = blob(space(lstr_info.uncompressed_size* 2 )) //проблема в двойке, без нее валилось
		garbagecollect() // без этого периодически тоже
		
		ll_ret = unzOpenCurrentFile(ll_zip) // вот это забыл
		
		if ll_ret< 0  then 
			i = ll_ret
			exit
		end if
		
		ll_size = unzReadCurrentFile(ll_zip, lblob_data, lstr_info.uncompressed_size) // а вот здесь без двойки надо
		
		unzCloseCurrentFile(ll_zip) // и вот это забыл
		
		if ll_ret< 0  then 
			i = ll_ret
			exit
		end if
		
		of_writefile(this.is_files[i], lblob_data)
		
		ll_ret = unzGoToNextFile(ll_zip)
		
		if ll_ret< 0  then 
			i = ll_ret
			exit
		end if
	loop
	
	unzClose(ll_zip)
end if

return i
Итого убил выходные
P.S. 6.5 посмертная
...
Рейтинг: 0 / 0
Как управлять содержимым zip?
    #36487701
Лампочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я правильно понимаю, что в последнем скрипте - распаковка архива, в котором несколько файлов?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как управлять содержимым zip?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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