xbzlip und Unterverzeichnisse

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

xbzlip und Unterverzeichnisse

Beitrag von Rudolf »

Hallo,
wenn ich mit xbzlip ein Archiv entpacke, werden bei mir die Unterverzeichnisse nicht angelegt, ich bekomme nur eine Fehlermeldung im Logfile dass der Pfad nicht vorhanden ist, z.B.

2015-11-24 10:47:40.87> Error while Saving File "\uniflex\sysupdate\install\rep\artums1.fr3":
Error Code: 3 -- Das System kann den angegebenen Pfad nicht finden.!

Das ist meine Funktion zum entpacken:

Code: Alles auswählen

static function ExtractFromArchive(cArc,cDir)
******************************************************************
LOCAL oZip := XbZLibZip():New(),lSubD := .t.,cFSpec := "*.*",cRepl := "N"
LOCAL nOvr := XBZ_OVERWRITE_OLDER
     oZip:Log:Open(left(cArc, At('.zip', lower(cArc))) + 'log')
     if left(upper(cRepl), 1) == 'A'
          nOvr := XBZ_OVERWRITE_ALL
     elseif left(upper(cRepl), 1) == 'N'
          nOvr := XBZ_OVERWRITE_NEVER
     endif
     oZip:SetDisplayObject(SetAppWindow())
     oZip:Open(cArc, XBZ_OPEN_READ)
     if oZip:IsOpen()
          oZip:Extract(cDir, cFSpec, lSubD, nOvr)
     endif
     oZip:Close()
return .t.

Sehe keinen Fehler darin. Es werden nur die Files im root Verzeichnis des Archivs entpackt, keine Unterverzeichnisse angelegt.
Grüße
Rudolf
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: xbzlip und Unterverzeichnisse

Beitrag von Martin Altmann »

Moin Rudolf,
die Parameter cFSpec und lSubD lasse ich weg - funzt. (also cDir, , , nOvr)
Allerdings vermute ich mal, dass Du das Zip falsch erstellt hast - Du musst auch die Verzeichnisnamen einpacken - mittels AddFile!:

Code: Alles auswählen

		cPath     := upper( CurDrive() ) + ':' + left( datenpfad, len( datenpfad ) - 1 )
		cZipFile  := upper( CurDrive() ) + ':' + archiv + "\" + katname + ".zip"
		if file( cZipFile )
			delete file ( cZipFile )
		endif
		oZip := XbZLibZip():New()
		oZip:SetDisplayObject( ::Static1 )
		oZip:Open( cZipFile, XBZ_OPEN_CREATE, XBZ_BEST_COMPRESSION )
		oZip:AddFile( cPath )
		oZip:AddFile( upper( CurDrive() ) + ':' + textpfad + "\" + katname )
		if ::lPDF .and. File( vordruckpfad + katname, "D" )
			oZip:AddFile( vordruckpfad + katname )
		endif
		if l2s .and. File( cPath + "\TAG2", "D" )
			oZip:AddFile( cPath + "\TAG2" )
		endif
		if l2s .and. File( upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2", "D" )
			oZip:AddFile( upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2" )
		endif
		oZip:AddDir( "*.dbf", cPath, , .f., .t., .f. )
		if l2s .and. File( cPath + "\TAG2", "D" )
			oZip:AddDir( "*.dbf", cPath + "\TAG2", , .f., .t., .f. )
		endif
		if ::lPDF .and. File( vordruckpfad + katname, "D" )
			oZip:AddDir( "*.pdf", upper( CurDrive() ) + ':' + vordruckpfad + katname, , .f., .t., .f. )
		endif
		oZip:AddDir( "*.txt", upper( CurDrive() ) + ':' + textpfad + "\" + katname, , .f., .t., .f. )
		oZip:AddDir( "*.rtf", upper( CurDrive() ) + ':' + textpfad + "\" + katname, , .f., .t., .f. )
		oZip:AddDir( "*.csv", upper( CurDrive() ) + ':' + textpfad + "\" + katname, , .f., .t., .f. )
		if l2s .and. File( upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2", "D" )
			oZip:AddDir( "*.txt", upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2", , .f., .t., .f. )
			oZip:AddDir( "*.rtf", upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2", , .f., .t., .f. )
			oZip:AddDir( "*.csv", upper( CurDrive() ) + ':' + textpfad + "\" + katname + "\TAG2", , .f., .t., .f. )
		endif
		oZip:Close()
Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: xbzlip und Unterverzeichnisse

Beitrag von Rudolf »

Hallo Martin,
danke für die Info, ich verwendet 7zip und den Parameter -r. Iin allen anderen Programmen sehen ich die Unterverzeichnisse im Zip File, sollte also passen.
z.B. "c:\Program Files (x86)\7-Zip\7z.exe" a -tzip "\install\setupfiles\formcommander\formcommander.zip" .\update\*.* -r
Werde mal ohne die anderen Parameter testen, glaube aber nicht dass diese einen Einfluss haben.
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: xbzlip und Unterverzeichnisse

Beitrag von Rudolf »

Hallo Martin,
hattest Recht, xbzlib kennt die Struktur nicht wenn das Archiv mit 7zip erstellt wurde, obwohl es andere Programm kennen. Wenn ich die zip Datei mit einem anderen Tool erstelle, funktioniert es. Werde 7zip ersetzen müssen.
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: xbzlip und Unterverzeichnisse

Beitrag von Rudolf »

Hallo,
mit
http://www.info-zip.org/Zip.html
funktioniert es problemlos, also Vorsicht mit 7Zip
Grüße
Rudolf
Antworten