![]() |
Delphi-Version: 7
ParamStr komplette Verzeichnisse auswählen
Hey, Ich hoffe mir kann jemand helfen. Mein Konsolenkonvertierer (FRP-PDF) ist soweit fertig. Ich kann aber derzeit nur einzelne Dateien umwandeln. Ich möchte aber Verzeichnisse, Ordner und Verzeichnisse + Unterordner konvertieren können. zum beispiel so: C:\Alte Dateien\FRP /DSub -> Dann soll er das komplette Verzeichnis konvertieren mit Unterordnern. Wie stell ich das am besten an?
Hier mein Code:
Delphi-Quellcode:
program Project2;
uses Forms, ShellApi, SysUtils, Graphics, Math, frxClass, frxExportPDF, FR_Class, PsFR_E_Main, PsFR_E_PDF; {$AppType Console} function FRPtoPDF(AFRPFile, APDFFile : string) : integer; var frReport : TfrReport; PDFExport : TPsfrPDFExport; begin Result := 1; if not fileexists(AFRPFile) then exit; if fileexists(APDFFile) then begin if not DeleteFile(APDFFile) then begin Result := 2; exit; end; end; frReport := TfrReport.Create(NIL); PDFExport := TPsfrPDFExport.Create(NIL); try PDFExport.ShowDialog := false; frReport.ShowProgress := false; try frReport.LoadPreparedReport(AFRPFile); frReport.ExportTo(PDFExport, APDFFile); except Result := 3; exit; end; finally PDFExport.Free; frReport.Free; end; Result := 0; end; var f : integer; eingabe : string; begin Writeln(Paramstr(1)); Writeln('////////////'); //unnötig f := FRPtoPDF(Paramstr(1),ChangeFileExt(Paramstr(1),'.pdf')); if f = 0 then Writeln('Konvertierung erfolgreich') else begin Writeln('Ein Fehler ist aufgetreten '+ IntToStr(F)); Writeln('Geben sie /? ein fuer weitere Informationen'); end; readln(eingabe); // Wegnehmen wenn fertig if eingabe = '/?' then begin Writeln('Fehlercode 1 - Verzeichnis existiert nicht oder ist falsch'); Writeln('Fehlercode 2 - PDF wurde ersetzt'); Writeln('Fehlercode 3 - Konvertierung fehlgeschlagen'); Writeln('D= - Directory - Verzeichnis'); Writeln('D= / Sub - Verzeichnis mit Unterordnern'); Writeln('F= - File - Ordner'); readln; // Wegnehmen wenn fertig end; end. |
AW: ParamStr komplette Verzeichnisse auswählen
Schau dir mal dieses
![]() |
AW: ParamStr komplette Verzeichnisse auswählen
Hallo,
wie man die Commandline auswertet habe ich dir im anderen Thread schon gezeigt. Dazu noch der Link von Baumina, und du bist am Ziel. Zu deinem Code. Schau dir auch nochmal den Try..Finally-Block an. Wenn du zwei constructoren aufrufst, dann solltest du diese besser innerhalb des try aufrufen.
Delphi-Quellcode:
Hintergrund: Wenn einer der beiden constructoren fehlschlägt, wird in jedem Fall mit Free wieder richtig aufgeräumt, weil Free auf "nil" prüft, und somit auch keine Exception wirft, wenn eine der beiden Instanzen nil ist.
try
frReport := TfrReport.Create(NIL); PDFExport := TPsfrPDFExport.Create(NIL); finylly PDFExport.Free; frReport.Free; end; |
AW: ParamStr komplette Verzeichnisse auswählen
Okay ich werd es mal probieren. Danke
|
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
Wenn im Konstruktor eine Exception auftritt - Wird der Destruktor ausgeführt - Und die Exception anschließend weiter geworfen - In den try..finally-Block kommt man somit erst gar nicht. (Deshalb ist
Delphi-Quellcode:
sogar eigentlich unnötig da im try..finally-Block die Referenz niemals
Free()
Delphi-Quellcode:
sein kann, ein
nil
Delphi-Quellcode:
reicht völlig)
Destroy()
|
AW: ParamStr komplette Verzeichnisse auswählen
ts, ts, ts, ...
Delphi-Quellcode:
procedure dofoo;
var foo: TFoo; begin foo := TFoo.Create; try // work with foo finally foo.Free; end; end; // aber procedure dofoobar; var foo: TFoo; bar: TBar; begin // lokale Variablen sind NICHT initialisiert, // also machen wir das mal foo := nil; bar := nil; try foo := TFoo.Create; bar := TBar.Create; // work with foo and bar finally foo.Free; bar.Free; end; end; |
AW: ParamStr komplette Verzeichnisse auswählen
Was ist ein TFoo? Konnte dazu in der OH nix finden..
|
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
@sirRufo Was will uns der Dichter damit sagen? Gruß K-H |
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
frReport := nil;
PDFExport := nil; try frReport := TfrReport.Create(NIL); PDFExport := TPsfrPDFExport.Create(NIL); finally PDFExport.Free; frReport.Free; end; |
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
Es geht darum, ein
Delphi-Quellcode:
zu vereinfachen (= weniger Einrückungen/Verschachtelungen).
procedure dofoobar;
var foo: TFoo; bar: TBar; begin foo := TFoo.Create; try bar := TBar.Create; try // work with foo and bar finally bar.Free; end; finally foo.Free; end; end; Das Thema hatten wir schon mal. Edit: Zu spät. (Aber kein blauer Balken?!) |
AW: ParamStr komplette Verzeichnisse auswählen
Ja genau, um diese Vereinfachung geht es.
@Sir Rufo, ich sehe wir sind uns einig was den try..finally anbelangt. Wo ich mir nicht ganz sicher bin, warum
Delphi-Quellcode:
Vorsichtsmaßnahme, oder Pflichtübung. Wenn Pflichtübung, warum? Meine Ansicht bzw. Wissensstand: Es sind lokale Instanzen und darum müsste doch die nil-Zuweisung eigentlich nicht erforderlich sein. Anders sieht es aus, wenn es globale oder Formvariablen sind, weil dann der Zeiger auf irgendwas zeigen kann, was vorher schon mal in Benutzung war und noch nicht überschrieben ist.
frReport := nil;
PDFExport := nil; |
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
Wenn ich also sicher gehen will, das dort der Wert xy drin steht, dann muss ich diesen Wert aktiv zuweisen. |
AW: ParamStr komplette Verzeichnisse auswählen
Zitat:
|
AW: ParamStr komplette Verzeichnisse auswählen
Hier hatte ich das auch schon einmal durchexerziert:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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 by Thomas Breitkreuz