Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как управлять содержимым zip? / 23 сообщений из 23, страница 1 из 1
29.04.2009, 16:30
    #35961432
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
Осваиваю использование zip-архива в РВ10.5.
Как программно добавить в архив новые файлы и удалить из него?
...
Рейтинг: 0 / 0
29.04.2009, 21:33
    #35962082
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
Неплохие ActiveX Control
Из ихней коллекции в свое время пользовался PowerTCP остался доволен, правда Buy It, но попробовать можно, если устраивает то и порыться в инете.
...
Рейтинг: 0 / 0
29.04.2009, 22:34
    #35962139
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
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
29.04.2009, 23:47
    #35962254
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
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
30.04.2009, 10:06
    #35962692
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
AIS
Да вроде и не поленился, и почитал перед тем как спрашивать.
Прошу прощения. Ну тогда это к разработчикам, а как вариант, распаковать , добавить или удалить, упаковать. Могу сбросить то, что предлагал выше (не триал), но сам архивами не занимался и ранняя версия, не уверен, что в ранней версии есть Add и Del. Одно маленькое неудобство надо регистрировать ActivX, но это не проблема создать батник или инсталяшки всего проекта. Отпишитесь, если надо сброшу Вам на почту.
...
Рейтинг: 0 / 0
30.04.2009, 13:05
    #35963296
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
maxATC ,
Спасибо за предложения и совет, но пока попробую еще это поковырять.
Вариант с ActivX не совсем подходит, т.к. думаю что не у всякого пользователя могут быть права на его регистрацию.
Интерес в том чтобы не распаковывать архив, а вставлять в него файлы и удалять из него динамически. Мысль использовать как хранилище информации.
Получать (минуя распаковку в файл) в Blob получается, к тому же есть пароль доступа. Всё ОК. Можно использовать, но задача в том чтобы ещё можно было корректировать эту инфу и снова возвращать в архив, а то и опять же создавать новый файл в архиве и удалять старый.

Может есть у кого-то по этой теме ещё мысли?
...
Рейтинг: 0 / 0
30.04.2009, 13:20
    #35963336
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
AIS ,
Попробовал свежую ActiveX от Dart, нет реализации добавления в существующий архив и удаление из него. Так, что и не меняйте шило на мыло.
Удачи.
...
Рейтинг: 0 / 0
30.04.2009, 14:20
    #35963518
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
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
30.04.2009, 21:20
    #35964220
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
AIS и удалять старый.
Может есть у кого-то по этой теме ещё мысли?

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

P.S. Уже есть оптимизм - ведь у Вас работает. 8)
...
Рейтинг: 0 / 0
01.05.2009, 15:14
    #35964560
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
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
01.05.2009, 15:18
    #35964564
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
Прошу прощения, опечатка.
Правильно так:
Код: plaintext
ls_exec = 'nircmd.exe  exec hide    '
...
Рейтинг: 0 / 0
01.05.2009, 15:45
    #35964588
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
Можно воспользоваться OLE компонентой расширения 1С raruslib.dll в которой реализован функционал работы с zip архивами, но насколько это лицинзионно чисто - я не в курсе.
...
Рейтинг: 0 / 0
01.05.2009, 18:52
    #35964714
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
Лет 8 назад я пользовался Xceed Zip Compression Library , работало всё как часы, но денежки...
...
Рейтинг: 0 / 0
01.05.2009, 19:47
    #35964743
AIS
AIS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
maxATC ,
За почту спасибо, получил. Буду пробывать, изучать.
Тема действительно интересная особенно когда сталкиваешься с БД типа Firebird - бесплатная, но незащищенная, вот и приходится искать варианты.
Да и вообще, хранить в архиве удобнее то, что не для всех предназначено.
...
Рейтинг: 0 / 0
02.05.2009, 21:05
    #35965377
VanoR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
AIS
8(
А можно скрипт? Ведь есть же отличия какие-то. У меня удаляет всё из архива и вставляет, то что хочу. А хочется чтобы только добавляло.

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

Этот 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
26.09.2009, 19:21
    #36218969
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
cezЭтот zlib выдает ошибку -102 при чтении текущего файла из архива.
Вообще код -102 - это неверные параметры функции. Возможно не хватает какого-то вызова перед этой функцией.

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

Какая версия PB? Если юникодная то библиотека ZLIB тоже должна быть юникодная.
...
Рейтинг: 0 / 0
27.09.2009, 12:16
    #36219161
cez
cez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым 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.
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
25.02.2010, 12:51
    #36487701
Лампочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как управлять содержимым zip?
я правильно понимаю, что в последнем скрипте - распаковка архива, в котором несколько файлов?
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как управлять содержимым zip? / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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