AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mit Rar packen per Datei-Liste

Ein Thema von nachtstreuner · begonnen am 26. Apr 2012 · letzter Beitrag vom 27. Apr 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.550 Beiträge
 
Delphi 12 Athens
 
#1

AW: Mit Rar packen per Datei-Liste

  Alt 26. Apr 2012, 15:30
Gibt es Leerzeichen im Pfad?
bzw. sind noch andere Zeichen im Pfadnamen enthalten, außer : \ A-Z a-z 0-9 - _

Und was macht ExecuteProgramm?
Kann man dort irgendwie den Fehlercode Exitcode des Programms bekommen?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 07:29
Hallo himitsu,

gestern konnte ich auf Deine Fragen nicht mehr antworten, deshalb erst jetzt:

zu 1: Nein , es gibt keine Leerzeichen im Pfad

zu 2: hier der Code zu Execute Programm
Code:
Procedure ExecuteProgramm(Const PFileName,Params: String);
Var
   SEInfo      : TShellExecuteInfo;
   ExitCode      : DWORD;
   ExecuteFile   : String;
Begin
   ExecuteFile:='"'+PFileName+'"';
   FillChar(SEInfo,SizeOf(SEInfo),0);
   SEInfo.cbSize:=SizeOf(TShellExecuteInfo);
   With SEInfo Do
   Begin
      fMask:=         SEE_MASK_NOCLOSEPROCESS;
      Wnd:=            Application.Handle;
      lpFile:=         PChar(ExecuteFile);
      lpParameters:=   PChar(Params);
      nShow:=         SW_SHOWNORMAL;
   End;
   If ShellExecuteEx(@SEInfo) Then
   Repeat
      Sleep(50);
      Application.ProcessMessages;
      GetExitCodeProcess(SEInfo.hProcess, ExitCode);
    FLAG := ExitCode;
   Until (ExitCode<>STILL_ACTIVE) Or Application.Terminated;
End;
..und hier der Code nochmal für die RarRoutine welche ExecuteProgramm aufruft:

Code:
  //*****************************************************************************
  // wenn als RAR gepackt werden soll, dann dies .....
  if DLS.PACK = 'RAR' then begin
     sLabel1.Visible := true;       // Bitte warten ---- anzeigen
     PATH       := ExtractFilePath(ParamStr(0));
     RarFilename := ini.ReadString('VERZ','tempSend','') + ZielTemp+'\'+EditPackName.Text;
     TempPath   := frmDLS.JamPathLabel_ZIEL.Path;
     DATEILIST := '@'+ExtractFilePath(ParamStr(0))+'backup.lst';
     // --------- Parameter für paramPack -------------------------------
     // a    : fügt die Dateien dem Archiv zu
     // - r  : rekursive Verzeichnissuche nach Dateien die hinzugefügt werden

     // - ep1 : Stammverzeichnis aus dem Namen entfernen
     // - df : Dateien nach dem archivieren löschen (optional)
     { Datei-Liste zusammenstellen }
     for X := 0 to frmDLS.ZIEL_O.Items.Count-1 do begin
         WriteDateien(frmDLS.ZIEL_O.Items[X].Caption);
     end;

     if Splitting = 0 then
       //paramPack := Format('a -r -ep1 -ms*.zip;*.rar;*.jpg "%s" "%s"', [RarFilename, TempPath]);
       paramPack := Format('a "%s" "%s"',[RarFilename, DateiList]);
     if Splitting = 100 then
        paramPack := Format('a -r -v100000k -ep1 -ms*.zip;*.rar;*.jpg "%s" "%s"', [RarFilename, TempPath]);
     if Splitting = 500 then
        paramPack := Format('a -r -v500000k -ep1 -ms*.zip;*.rar;*.jpg "%s" "%s"', [RarFilename, TempPath]);
     if Splitting = 1000 then
        paramPack := Format('a -r -v1000000k -ep1 -ms*.zip;*.rar;*.jpg "%s" "%s"', [RarFilename, TempPath]);
     Application.ProcessMessages;

     ExecuteProgramm(PChar(PATH + '\rar.exe'),PChar(paramPACK));
//Shellexecute(0, 'open', PChar(PATH + 'rar.exe'), PChar(paramPACK), nil, SW_SHOW);

     frmDLS.sStbar_DLS.Panels[3].Text := '['+IntToStr(Flag)+'] : Packvorgang war erfolgreich !';
     if Flag = 0  then Showmessage('['+IntToStr(Flag)+'] : Packvorgang war erfolgreich !');
     { Error Codes für RAR
     255  = USER BREAK Anwender hat Process gestoppt
     9    = CREATE ERROR   Erzeugt einen Dateifehler
     8    = MEMORY ERROR   Speicher out of Memory(nicht genügend Speicher
     7    = USER ERROR     Kommandozeilenfehler (OPTIONEN)
     6    = OPEN ERROR
     5    = WRITE ERROR
     4    = LOCKED ARCHIVE gesperrtes Archiv
     3    = CRC ERROR
     2    = FATAL ERROR
     1    = WARNING
     0 = ERFOLGREICH}
zu guter Letzt noch der Code zu WriteDateien :

Code:

const
 LOGFILE = 'USER.log';
 LOGFILE1 = 'dataOUT.log';
 LOGFILE2 = 'dataIN.log';
 PACKLIST = 'backup.lst';




function WriteDateien(LogString: String) : Integer;
var
  f: TextFile;
begin
  {$IOChecks OFF}
  AssignFile(f, ExtractFilePath(ParamStr(0))+PACKLIST);
  if FileExists(ExtractFilePath(ParamStr(0))+PACKLIST) then
    Append(f)
  else
    Rewrite(f);
  Writeln(f, LogString);
  CloseFile(f);
  result := GetLastError();
{$IOCHECKS ON}
end;
hier mal ein paar Debug-Infos:

4.jpg zeigt den ExitCode (10)
Angehängte Grafiken
Dateityp: jpg 1.jpg (37,9 KB, 8x aufgerufen)
Dateityp: jpg 2.jpg (81,9 KB, 9x aufgerufen)
Dateityp: jpg 3.jpg (64,6 KB, 6x aufgerufen)
Dateityp: jpg 4.jpg (26,2 KB, 6x aufgerufen)
Alles wird gut -
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 07:36
Das @ steht an der falschen Stelle, behaupte ich mal, das sollte ja vor die Anführungszeichen des Pfads.

[edit] Übrigens musst Du nicht pollen, mit WaitForSingleObject kannst Du auch ermitteln, wann das gestartete Programm beendet wurde. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 07:44
Hallo DeddyH,

danke für den Hinweis, werde es gleichmal ausprobieren mit dem (@), nur das mit dem Pollen versteh ich noch nicht

Wo müßte der Code bezüglich (WaitForSingleObject) geändert werden ?

Gruß nachtstreuner
Alles wird gut -
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 08:32
Ein Beispiel von vielen: http://www.delphipraxis.net/137061-p...kgabewert.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.550 Beiträge
 
Delphi 12 Athens
 
#6

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 08:45
Nja, optisch sieht ExecuteProgramm schon so aus, als wenn es funktionieren könnte.
Nur noch in eine Funktion umwandeln oder ein Out/Var-Parameter für den ExitCode
und diesen dann auch noch auswerten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 08:47
Hallo DeddyH,

Die Erklärungen tragen leider nichts zur Lösung meines Problems bei, sind aber sehr interessant und im Code mit Sicherheit zu berücksichtigen. Werde ich auch testen.

Nach langem Probieren, warum die Packliste(@backup.lst) nicht ausgelesen wurde, habe ich nun die vermeintliche Lösung gefunden.

Ich mache noch ein paar Tests in Bezug auf Leerzeichen, Sonderzeichen in Dateinamen und werde das Ergebnis posten bzw.
wenn gewünscht werde ich versuchen, wenn nun alles sauber funktioniert ein aussagekräftiges Tut. zu schreiben, für alle die sich mit den Kommandozeilen in der RAR.exe herumschlagen wollen.

Beim jetzigen Test, werden sowohl ganze Ordner mit Unterordner , sowie Dateien mit RAR aus Delphi heraus gepackt. Wunschweise auch mit Ursprungspfad oder auch Ohne (siehe param -ep1).

Wie gesagt ich melde mich gleich wieder.

Gruß nachtstreuner
Alles wird gut -
Alles wird gut -
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Mit Rar packen per Datei-Liste

  Alt 27. Apr 2012, 08:49
Hallo himitsu,

den ExitCode werte ich doch aus.
Code:
if Flag = 0  then Showmessage('['+IntToStr(Flag)+'] : Packvorgang war erfolgreich !');
Oder nicht ?
Angehängte Grafiken
Dateityp: jpg 5.jpg (213,9 KB, 4x aufgerufen)
Alles wird gut -

Geändert von nachtstreuner (27. Apr 2012 um 08:53 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz