Einzelnen Beitrag anzeigen

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, 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)
Miniaturansicht angehängter Grafiken
1.jpg   2.jpg   3.jpg   4.jpg  
Alles wird gut -
  Mit Zitat antworten Zitat