Zip/Unzip
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Zip/Unzip
Moin,
es gibt hier im Forum diverse DIskussionen darum, wie man mit zip-Archiven umgehen kan. Meist wird dabei auf die XbZLib von Phil verwiesen, die inzwischen von Andreas gepflegt wird.
Nun stellt sich mir die Frage ob man nicht die seit Jahren schon von Windows bereit gestellte Funktion nutzen kann. Per API-Aufruf oder sonst wie. Das müsste doch eigentlich machbar sein.
Mir geht es dabei im Moment nur um die fundamentalen Grundfunktionen, also kein Passwortschutz etc.
Jan
es gibt hier im Forum diverse DIskussionen darum, wie man mit zip-Archiven umgehen kan. Meist wird dabei auf die XbZLib von Phil verwiesen, die inzwischen von Andreas gepflegt wird.
Nun stellt sich mir die Frage ob man nicht die seit Jahren schon von Windows bereit gestellte Funktion nutzen kann. Per API-Aufruf oder sonst wie. Das müsste doch eigentlich machbar sein.
Mir geht es dabei im Moment nur um die fundamentalen Grundfunktionen, also kein Passwortschutz etc.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9459
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 374 Mal
- Kontaktdaten:
Re: Zip/Unzip
Das ist die "Compressions API" von Windows. Interessanter Gedanke, das direkt zu nutzen.
https://docs.microsoft.com/en-us/window ... ion-portal
https://docs.microsoft.com/en-us/window ... ion-portal
Herzlich,
Tom
Tom
- Marcus Herz
- 1000 working lines a day
- Beiträge: 878
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 202 Mal
- Kontaktdaten:
Re: Zip/Unzip
Code: Alles auswählen
//=========================================
FUNC Unzip(cZipFile, cDestFolder)
LOCAL oShell, oZIP, oNameDest
oShell := CreateObject("Shell.Application")
oZIP := oShell:NameSpace(cZipFile)
oNameDest := oShell:NameSpace(cDestFolder)
oNameDest:CopyHere(oZIP:items(), 0x10)
oShell:destroy()
RETURN NIL
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
Hallo Marcus,
holla die Waldfeee! Das ist ja super. Und super simpel.
Das Einzige das mich daran stört ist, das da der übliche riesige Windows-Fortschritt angezeigt wird. Das sollte ja besser im Programm generiert werden, oder ganz weg sein. Aber wie egsagt - ich bin schon mal durchaus begeistert.
Jetzt muß ich das noch im Detail verstehen um darüber dann herausfinden, wie der umgekehrte Weg geht.
Jan
holla die Waldfeee! Das ist ja super. Und super simpel.
Das Einzige das mich daran stört ist, das da der übliche riesige Windows-Fortschritt angezeigt wird. Das sollte ja besser im Programm generiert werden, oder ganz weg sein. Aber wie egsagt - ich bin schon mal durchaus begeistert.
Jetzt muß ich das noch im Detail verstehen um darüber dann herausfinden, wie der umgekehrte Weg geht.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
OK, erste Frage scheint beantwortet. Marcus, Du baust da als Parameter 0x10 = 16 ein. 16 heißt: "Alle Fragen mit Ja beantworten". Es gibt noch den Wert 4 "Keinen Statusdialog anzeigen". Wenn ich das aufaddiere müsste das doch eigentlich passen.
Schauen wir mal...
Jan
Schauen wir mal...
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
Jupp, klappt.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Muecke
- 1000 working lines a day
- Beiträge: 628
- Registriert: Di, 24. Okt 2006 7:19
- Wohnort: Samstagern CH
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 9 Mal
- Kontaktdaten:
Re: Zip/Unzip
Hallo Jan
Wie sieht nun deine Lösung aus ?
Kann man damit auch alle Unterordner mit einbeziehen ?
Schöne Grüsse
Thomas
Wie sieht nun deine Lösung aus ?
Kann man damit auch alle Unterordner mit einbeziehen ?
Schöne Grüsse
Thomas
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
Hallo Thomas,
Du meist das zippen? Soweit bin ich noch nicht. Ich glaube ich habe den Weg dazu gefunden, werde das aber wohl erst am Samstag ausprobieren können.
Jan
Du meist das zippen? Soweit bin ich noch nicht. Ich glaube ich habe den Weg dazu gefunden, werde das aber wohl erst am Samstag ausprobieren können.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 226
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 4 Mal
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
OK, hab jetzt doch schon auch das zippen gelöst. Das ist im Prinzip exakt die Funktion oben von Marcus. Nur das die Parameter halt vertauscht werden müssen:
Wichtig ist:
Jan
Code: Alles auswählen
oShell := CreateObject("Shell.Application")
oZipVerzeichnis := oShell:NameSpace(cZuZipendesVerzeichnis)
oZIP := oShell:NameSpace(cZipArchiv)
oZIP:CopyHere(oZipVerzeichnis:items(), cHex) // Ich hab hier cHex variabel gemacht, Marcus hatte da statisch für seine Bedürfnisse ein 0x10 drin stehen
oShell:destroy()
- Anscheinend müssen alle Dateien, die in das Archiv kopiert werden müssen, in einem Verzeichnis liegen. Das dann komplett mit allem Inhalt in die Zip gepackt wird.
- Die Datei cZipArchiv muß vorher z. B. per FCreate() erstellt worden sein.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- AUGE_OHR
- Marvin
- Beiträge: 12931
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 48 Mal
Re: Zip/Unzip
hi,
das Thema habe ich 2014 hier im Forum gebracht
https://www.xbaseforum.de/viewtopic.php ... ere#p56785
... das bekommt man natürlich nur mit wenn man Artikel "von mir" liest
---
"CopyHere" läuft asynchron d.h. die App konnte beendet werden bevor alles "ge-ziped" wurde.
es "fehlt " also der entscheidende Teil ...
das Thema habe ich 2014 hier im Forum gebracht
https://www.xbaseforum.de/viewtopic.php ... ere#p56785
... das bekommt man natürlich nur mit wenn man Artikel "von mir" liest
---
"CopyHere" läuft asynchron d.h. die App konnte beendet werden bevor alles "ge-ziped" wurde.
es "fehlt " also der entscheidende Teil ...
gruss by OHR
Jimmy
Jimmy
- Marcus Herz
- 1000 working lines a day
- Beiträge: 878
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 40 Mal
- Danksagung erhalten: 202 Mal
- Kontaktdaten:
Re: Zip/Unzip
Stimmt Jimmy
Ich hab das glaub ich von dir. Will mich nicht mit fremden Federn schmücken
Ich hab das glaub ich von dir. Will mich nicht mit fremden Federn schmücken
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
... wobei man sagen muß, da sich Jimmys Thread durchaus gefunden hatte bei meiner Suche nach Alternativen. Der fing aber dermaßen verquast und kompliziert an mit C-Code oder sowas, das ich nach zwei oder drei Beiträgen aufgegeben habe das weiter zu lesen. Das dann ganz unten eine Xbase++-Lösung in relativ wenigen Codezeilen kam hab ich damit dann nicht mehr gesehen.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Muecke
- 1000 working lines a day
- Beiträge: 628
- Registriert: Di, 24. Okt 2006 7:19
- Wohnort: Samstagern CH
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 9 Mal
- Kontaktdaten:
Re: Zip/Unzip
Hallo Jimmy
zum verschlüsseln hast du da auch noch was in deiner
Trickkiste ?
Gruss
Thomas
zum verschlüsseln hast du da auch noch was in deiner
Trickkiste ?
Gruss
Thomas
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2526
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 79 Mal
Re: Zip/Unzip
Das geht leider Anhand der Unterlagen von M$ auf diese Art und Weise nicht.
Wäre aber auch auf eine Lösung gespannt.
Valar Morghulis
Gruss Carlo
Gruss Carlo
- brandelh
- Foren-Moderator
- Beiträge: 15734
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 77 Mal
- Danksagung erhalten: 40 Mal
- Kontaktdaten:
Re: Zip/Unzip
Bei der Microsoft API frage ich mich ob die zuverlässiger ist als die ZIP Funktion des Explorers.
Leider hatte ich schon Fehler beim ZIPPen und auch beim entZIPPen mit der Explorer Version.
Ich nehme nur noch 7zip als Programm.
Leider hatte ich schon Fehler beim ZIPPen und auch beim entZIPPen mit der Explorer Version.
Ich nehme nur noch 7zip als Programm.
Gruß
Hubert
Hubert
- azzo
- 1000 working lines a day
- Beiträge: 505
- Registriert: So, 28. Mär 2010 19:21
- Danksagung erhalten: 14 Mal
Re: Zip/Unzip
Hallo,
ich nutze problemlos seit Jahren 7z.exe
DCOM := '7Z.exe X ' + cDst + cBackupFile + " -o" + cDst + "temp" + " -pmeinPasswort"
WAITRUN(DCOM,0)
LG
Otto
ich nutze problemlos seit Jahren 7z.exe
DCOM := '7Z.exe X ' + cDst + cBackupFile + " -o" + cDst + "temp" + " -pmeinPasswort"
WAITRUN(DCOM,0)
LG
Otto
- Jan
- Marvin
- Beiträge: 14689
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 89 Mal
- Kontaktdaten:
Re: Zip/Unzip
Otto,
das war nicht die Frage. Mir ging es ausdrücklich darum externe Bibliotheken zu vermeiden.
Jan
das war nicht die Frage. Mir ging es ausdrücklich darum externe Bibliotheken zu vermeiden.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15734
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 77 Mal
- Danksagung erhalten: 40 Mal
- Kontaktdaten:
- AUGE_OHR
- Marvin
- Beiträge: 12931
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 48 Mal
Re: Zip/Unzip
hi,
die SHFileOperation API ist für das File-System wie es auch Windows nutzt
inzwischen gibt es das iFileOperation Interface was das selbe System benutzt.
---
bei selben Windows Versionen "sollte" es keine Probleme geben z.b. "fremde" Zeichen
man muss dann "nur" das entsprechende Sprach-Paket installieren damit es ohne Fehler läuft.
---
Windows kann ein ZIP Files mit Passwort "entpacken" aber leider nicht "verpacken"
... aber man kann ja den "Inhalt" verschlüsseln
p.s. COPYHERE kann man auch nutzen um z.b. Fotos vom iPhone, was sich als Device nicht Laufwerk meldet, auf den PC zu übertragen
die COPYHERE API ist "die" welche der Explorer zum packen/entpacken nutzt.
die SHFileOperation API ist für das File-System wie es auch Windows nutzt
inzwischen gibt es das iFileOperation Interface was das selbe System benutzt.
---
bei selben Windows Versionen "sollte" es keine Probleme geben z.b. "fremde" Zeichen
man muss dann "nur" das entsprechende Sprach-Paket installieren damit es ohne Fehler läuft.
---
Windows kann ein ZIP Files mit Passwort "entpacken" aber leider nicht "verpacken"
... aber man kann ja den "Inhalt" verschlüsseln
p.s. COPYHERE kann man auch nutzen um z.b. Fotos vom iPhone, was sich als Device nicht Laufwerk meldet, auf den PC zu übertragen
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 226
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 4 Mal
Re: Zip/Unzip
Hallo Jimmy,
Hast du denn zufällig ein Beispiel um auf ein mobil Gerät zuzugreifen?
Das finde ich überaus interessant
Hast du denn zufällig ein Beispiel um auf ein mobil Gerät zuzugreifen?
Das finde ich überaus interessant
Gruß Dominik
- AUGE_OHR
- Marvin
- Beiträge: 12931
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 20 Mal
- Danksagung erhalten: 48 Mal
Re: Zip/Unzip
hi,
ich habe es unter harbour mit HMG Controls, die nicht Xbp heissen, geschrieben
die "semi" OOP Syntax ist anders und ähnelt eher Express++ und arbeitet mit Function
aber der ActiveX Teil um den es geht ist 100% Syntax kompatible
das COPYHERE / MOVEHERE
den ganze HMG Source und 32 / 64 Bit EXE findet man hier
https://github.com/AugeOhr/HBFM
ich stelle gerade fest das ich das Modul nicht mit Xbase++ geschrieben habe.Dominik Krebs hat geschrieben: ↑Mo, 05. Jul 2021 20:26 Hast du denn zufällig ein Beispiel um auf ein mobil Gerät zuzugreifen?
Das finde ich überaus interessant
ich habe es unter harbour mit HMG Controls, die nicht Xbp heissen, geschrieben
die "semi" OOP Syntax ist anders und ähnelt eher Express++ und arbeitet mit Function
aber der ActiveX Teil um den es geht ist 100% Syntax kompatible
Code: Alles auswählen
PROCEDURE SearchDevice()
LOCAL cName, oItems
LOCAL i, iMax
LOCAL xParent
nLevel := 1
xParent := nLevel
oShell := CreateObject( "shell.application" )
IF NIL <> oShell
oFolder := oShell:NameSpace( CSIDL_DRIVES ) // 0x0011 // My Computer
IF NIL <> oFolder
oItems := oFolder:Items()
iMax := oItems:Count
FOR i := 1 TO iMax
oFolderItem := oItems:Item( i - 1 )
IF !EMPTY( oFolderItem )
cName := UPPER( oFolderItem:name )
IF cName = "DESKTOP"
LOOP
ENDIF
IF ASCAN( aFolder, { | e | e[ ID_Name ] = cName .AND. e[ ID_Level ] = nLevel } ) > 0
ELSE
nElement ++
// "nur" die Tree Darstellung mit HMG "semi" OOP Syntax
IPHONE.Tree_1.AddItem( cName, nLevel, nElement ) // nLevel := 1
IPHONE.Tree_1.CARGO( nElement ) := { cName, nLevel + 1 } // next Level Action
IPHONE.Tree_1.NodeFlag( nElement ) := .T.
// IPHONE.Tree_1.ImageIndex ( nElement ) := { IMAGE_FOLDER_UNCHECKED, IMAGE_FOLDER_UNCHECKED }
IPHONE.Tree_1.ImageIndex( nElement ) := IsRealDrive( oFolderItem )
// diese Array werden benütigt
AADD( aFolder, { oFolderItem, cName, nLevel + 1, xParent, nElement } )
AADD( aDevices, oFolderItem )
IF .NOT. oFolderItem:isFileSystem
AADD( aFileSys, i )
ENDIF
ENDIF
ENDIF
NEXT
ENDIF
ENDIF
// harbour HMG
DO EVENTS
RETURN
Code: Alles auswählen
PROCEDURE DoCopySingle( oDirFolder, cTarget, lMove )
LOCAL hGrid := GetControlHandle( "Grid_1", "IPHONE" )
LOCAL oNewSH := CreateObject( "Shell.Application" )
LOCAL oTarget := oNewSH:NameSpace( cTarget )
LOCAL xFlag := FOF_SIMPLEPROGRESS
LOCAL aFiles := {}
LOCAL oFile, cFile, xCount, nCount
LOCAL i, iMax, nSkip := 0
LOCAL nState := hb_BitOr( LVIS_SELECTED, LVIS_FOCUSED )
LOCAL nMask := hb_BitOr( LVIS_SELECTED, LVIS_FOCUSED )
DEFAULT lMove TO .F.
IPHONE.ProgressBar_1.Value := 0
TBL_SETVALUE( ThisWindow.Handle, 0, 100 )
iMax := oDirFolder:Count
FOR i := 1 TO iMax
IPHONE.ProgressBar_1.Value := CalcPos( i, iMax )
TBL_SETVALUE( ThisWindow.Handle, CalcPos( i, iMax ), 100 )
DO EVENTS
// if Checkbox is marked
IF IPHONE.Grid_1.CheckBoxItem( i ) = .T.
// get Item Object
oFile := oDirFolder:Item( i - 1 )
IF lMove = .T.
// move single Object file
oTarget:MoveHere( oFile, xFlag )
ELSE
// copy single Object file
oTarget:CopyHere( oFile, xFlag )
ENDIF
// wait until all files are written
xCount := 0
DO WHILE .T.
// compare if file is written
nCount := oTarget:items() :Count()
IF nCount + nSkip >= i
EXIT
ENDIF
hb_idleSleep( 0.1 )
xCount ++
IF xCount > 50
EXIT
ENDIF
ENDDO
// this Syntax give Error ?
// IPHONE.Grid_1.CheckBoxItem( i ) = .F.
// so use this Syntax
SetProperty( "IPHONE", "Grid_1", "CheckBoxItem", i, .F. )
// scroll GRID if need
LISTVIEW_SETITEMSTATE( hGrid, i, nState, nMask )
ListView_EnsureVisible( hGrid, i )
ELSE
// Skip un-maked
nSkip ++
ENDIF
NEXT
// clean up
hb_idleSleep( 0.5 )
IPHONE.ProgressBar_1.Value := 0
TBL_SETVALUE( ThisWindow.Handle, 0, 100 )
oTarget := NIL
oNewSH := NIL
// harbour HMG
DO EVENTS
RETURN
https://github.com/AugeOhr/HBFM
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 226
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 16 Mal
- Danksagung erhalten: 4 Mal
Re: Zip/Unzip
Das ist wirklich klasse, jetzt habe ich viel zum experimentieren
Vielen Dank!
Vielen Dank!
Gruß Dominik