Command String Probleme mit 7zip (Gelöst)

Du brauchst Grafiken, gute Programme oder Leute die dir helfen? Frag hier.
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Command String Probleme mit 7zip (Gelöst)

Beitrag von walbus »

Könntet ihr mir hier bitte aushelfen,
ich krieg den String (hier im Code ist er zum erstellen) nicht umgestellt zum auslesen eines Archiv´s,
mit der Kommanodzeilen Version von 7zip.
Klappt einfach nicht !

Gruss Werner

Code: Alles auswählen

;Modified version of Oryaaa's 7zip code - http://www.purebasic.fr/english/viewtopic.php?p=181484#181484

DataSection
zip:
IncludeBinary "7za.exe"
zip_e:
EndDataSection

Procedure.b SevenZip_Archive(archive.s, target.s, compression.b=9)
  Protected file.l , param.s , zip_Run.l , runfile.s
  
  ;Check if archive path is a folder
  directory$ = GetPathPart(archive)
  ExamineDirectory(0, directory$, "*.*")
  
  If Not IsDirectory(0)
    MakeSureDirectoryPathExists_(@directory$)
     ;CreateDir(directory$)
  EndIf
  
  param.s = "a -mx=" + Str(Compression) + " " + Chr(34) + archive + Chr(34) + " " + Chr(34) +target+ Chr(34)

  runfile.s = GetTemporaryDirectory() + Str(Date()) + "\7za.exe"
  CreateDirectory(GetPathPart(runfile))
  file.l = CreateFile(#PB_Any, runfile)
  
  If file
    WriteData(file, ?zip, ?zip_e-?zip)
    CloseFile(file)
    workingdir$=GetPathPart(Archive)
    zip_Run = RunProgram(runfile, param,workingdir$, #PB_Program_Open|#PB_Program_Hide)
    While ProgramRunning(zip_Run)
      Delay(10)
    Wend
    Debug ProgramExitCode(zip_Run) ; Fehlermeldung : 0=OK - 1=unvollständig - 2=Fatal - 7=Command line error - 8 zu wenig Memory - 255=User stoppt Prozess
    CloseProgram(zip_Run)
    
    Repeat
       Result = DeleteDirectory(GetPathPart(runfile),"")
    Until Result <> 0
    
    ProcedureReturn #True 
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

quell_dateipfad$="C:\Dokumente und Einstellungen\"+GetEnvironmentVariable("USERNAME")+"\desktop\"+"test" ; Dateipfad zum Desktop

Debug SevenZip_Archive(quell_dateipfad$+".zip",quell_dateipfad$,9)

Zuletzt geändert von walbus am 24.08.2013 10:01, insgesamt 6-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Suche Command String zum Ordner auslesen 7zip

Beitrag von Kiffi »

da Dein quell_dateipfad$ Leerzeichen beeinhaltet, solltest Du ihn in doppelte Anführungszeichen (CHR(34)) setzen.

Grüße ... Kiffi
Hygge
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: Suche Command String zum Ordner auslesen 7zip

Beitrag von walbus »

Ja, danke, dies ist der String zum schreiben, er funktioniert.
Ich bräuchte einen zum lesen !
Krieg es nicht gebacken ihn umzustellen, hab schon alles mögliche probiert, immer Fehlermeldung

Gruß Werner
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Suche Command String zum Ordner auslesen 7zip

Beitrag von _JON_ »

Meist Du jetzt auslesen oder entpacken?

Ersteres wäre: 7za l "Archive.7z"
Entpacken : 7za e "Archive.7z" "Ziel"
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: Suche Command String zum Ordner auslesen 7zip

Beitrag von walbus »

Hallo
Entpacken eines bestehenden Archives

Einen funktionierenden Command String um Archive mit der Kommandozeilen Version von 7zip , daher im Hintergrund, zu entpacken.

Danke für die Mühe

Gruss Werner
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Suche Command String zum Ordner auslesen 7zip

Beitrag von bobobo »

angelehnt an deinen Code sollte das so gehen

der commandstring ist x -o"zielverzeichnis" "zipdateiname" ..wichtig kein Space hinter dem -o

Ich mach sowas gerne über Batchdateien. Die baue ich zusammen und rufe die dann hidden auf.
Das u.a. hat den Vorteil der besseren Fehleranalyse.
Dieses Programmoutputding muss nämlich nicht immer zum Erfolg führen, je nach aufgerufener
Exe-Datei. 7za geht aber so durchaus.

Ich habe hier eine etwas andere Herangehensweise zur Ermittlung des DesktopOrdners gewählt

Code: Alles auswählen

;Modified version of Oryaaa's 7zip code - http://www.purebasic.fr/english/viewtopic.php?p=181484#181484

DataSection
zip:
IncludeBinary "7za.exe"
zip_e:
EndDataSection

Procedure.b SevenZip_Archive(archive.s, target.s, compression.b=9)
  Protected file.l , param.s , zip_Run.l , runfile.s
  
  ;Check if archive path is a folder
  directory$ = GetPathPart(archive)
  ExamineDirectory(0, directory$, "*.*")
  
  If Not IsDirectory(0)
    MakeSureDirectoryPathExists_(@directory$)
     ;CreateDir(directory$)
  EndIf
  
    param.s = "x -o" +  Chr(34) +target+ Chr(34)+ Chr(34) + archive + Chr(34) ;wichtig !! kein Space hinter dem -o

  runfile.s = GetTemporaryDirectory() + Str(Date()) + "\7za.exe"
  CreateDirectory(GetPathPart(runfile))
  file.l = CreateFile(#PB_Any, runfile)
  
  If file
    WriteData(file, ?zip, ?zip_e-?zip)
    CloseFile(file)
    workingdir$=GetPathPart(Archive)
    zip_Run = RunProgram(runfile, param,workingdir$, #PB_Program_Open)
    While ProgramRunning(zip_Run)
      
      While AvailableProgramOutput(zip_Run)
        Debug ReadProgramString(zip_Run)
      Wend
      
    Wend
    Debug ProgramExitCode(zip_Run) ; Fehlermeldung : 0=OK - 1=unvollständig - 2=Fatal - 7=Command line error - 8 zu wenig Memory - 255=User stoppt Prozess
    CloseProgram(zip_Run)
    
    Repeat
       Result = DeleteDirectory(GetPathPart(runfile),"")
    Until Result <> 0
    
    ProcedureReturn #True 
  Else
    ProcedureReturn #False
  EndIf
EndProcedure

quell_dateipfad$=GetHomeDirectory()+"\desktop" ; Dateipfad zum Desktop
Debug quell_dateipfad$+".zip"
Debug quell_dateipfad$

Debug SevenZip_Archive(quell_dateipfad$+".zip",quell_dateipfad$,9)
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: Suche Command String zum Archiv auslesen mit 7zip

Beitrag von walbus »

Bringt leider immer noch Fehlermeldung.
Mit der Batch, ein guter Tip !

Gruss Werner
Zuletzt geändert von walbus am 24.08.2013 10:03, insgesamt 2-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Suche Command String zum Archiv auslesen mit 7zip

Beitrag von Kiffi »

walbus hat geschrieben:[...] immer noch Fehlermeldung.
... die da lautet?

Grüße ... Kiffi
Hygge
walbus
Beiträge: 137
Registriert: 03.03.2013 20:50

Re: Suche Command String zum Archiv auslesen mit 7zip (gelös

Beitrag von walbus »

7=Command line error

Der Vorschlag von ´bobobo´ mit den Batch Dateien ist die Lösung.
Dann funktionieren auch die Command Strings so wie sie sollen !

Hier etwas Code.
Er nutzt den Trick, den ´Kiffi´ mal postete, mit den einfachen Hochkomma´s um die Strings einfach erstellen zu können, ohne dass man die Kriese kriegt mit dem Gefummel.

Code: Alles auswählen

Procedure create_batch(source$,target$,command$)
  
     Protected result

     result= CreateFile (0, GetTemporaryDirectory()+"quickaes256.bat") ; Batch Datei in Temp Ordner erzeugen
  
  If result
 
    ; Falls Leerzeichen im Pfadnamen sind, muß dieser mit doppelten Anführungszeichen eingefaßt sein
    ; 7za ist die stand alone Version von 7zip
    ; 7a ist Bestandteil der Desktop Version
    ; Command String durch einfache Hochkomma lesbarer machen 

      command$=ReplaceString(command$, "''",Chr(34))

      WriteString (0, command$)
  
      Debug command$
  
      CloseFile (0) ; schließen der zuvor geöffneten Datei und damit endgültiges Abspeichern der Daten
    Else
      MessageRequester (" Information "," Konnte Datei nicht erstellen !")
  EndIf
    
    ProcedureReturn result
 
  EndProcedure
  
  ;-----------------------------------------------------------------------
  
  quell_dateipfad$=GetHomeDirectory()+"desktop"

  source$=quell_dateipfad$+"\"+"test.7z"
  
  target$=quell_dateipfad$+"\"+"test\*.*"

; ------- Ein paar beliebig erweiterbare Beispiele ---------
  
 ; command$="7za a -t7z ''''"+source$+"'''' ''''"+target$+"''''" ; Archiv packen
 ; -------
 ; 7z x test.zip -aoa
   command$="7za e ''''"+source$+"''''"+" -aoa" ; Archiv auspacken
 ;--------
   ;target$=quell_dateipfad$+"\"+"test" ; Archiv auspacken
  ; command$="7za x ''''"+source$+"''''"+" -o''''"+target$+"''''" ; Archiv auspacken
 ;-------
 ; zB. Packen    : 7za l "Archive.7z"
 ; zB. Entpacken : 7za e "Archive.7z" "Ziel"
;--------

  Debug source$
  Debug target$
  
  Debug create_batch(source$, target$, command$)
Gruss Werner
Antworten