Dateibetrachter über TProcess starten

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
aldicek
Beiträge: 37
Registriert: Do 6. Mär 2008, 12:48
OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
CPU-Target: 64 Bit
Wohnort: Halle (Saale)

Dateibetrachter über TProcess starten

Beitrag von aldicek »

Hallo!

Ich erstelle gerade ein Programm, das mir hilft Bilddubletten zu finden und zu eliminieren. Die einzelnen Arbeitsschritte sind wie folgt:
1. in der Kommandozeile einen gegebenen Ort rekursiv nach *.jpg-Dateien durchsuchen, diese via Pipe durch md5sums (Linux) oder md5 (DOS/Win) hashen und Hash mit voll qualifiziertem Dateinamen in eine Datei schreiben.
Diese wird wiederum in der Kommandozeile sortiert und alle mehr als einmal auftauchenden Hashes werden mit zugehöriger Dateibezeichnung geordnet in eine 2. Datei geschrieben. Das funktioniert wie vorgesehen.
2. Jetzt kommt das Sichten und Löschen. Dafür soll mein Programm in einem Stringgrid zeilenweise Hash und Dateiname aus der sortierten Liste darstellen. Klicke ich die Zelle mit dem Hash doppelt, soll pro Datei mit diesem Hash ein Fenster mit Bildbetrachter aufgehen, der mir das entspr. Bild im übergebenen Verzeichnis anzeigt.
Es gibt für mich maßgebliche Gründe, das Bild mit einem Standard-Bildbetrachter anzuschauen und keine eigene Lösung zu basteln - u.a. ist der Aufwand dem Zweck einfach nicht angemessen.
Das automatische Öffnen der übergebenen Datei geht unter Windows auch sehr gut mit

Code: Alles auswählen

ShellExecute(0, nil, PChar(StringGrid.Cells[2, x]),nil,nil,3);

wobei in Spalte 2 der selektierten Zeile der vollständige Dateiname steht. Soweit bin ich schon, dass das klappt.
Aber: ich muss aus bestimmten Gründen sowohl unter Windows als auch unter Linux arbeiten und habe auf beiden (lokal getrennten und nicht vernetzbaren) Systemen Datenbestände zu entduplizieren.
Daher wäre anscheinend TProcess zum Öffnen des Viewers der geeignetste Kandidat. Wie aber übergibt man TProcess hier die Datei in der Weise, dass dann tatsächlich der jeweils systemseitig definierte Viewer gestartet und die übergebene Datei geladen wird? Kann momentan nur unter Windows testen aber nach mehreren Tests genügt es nicht, einfach nur die voll qualifizierte Datei zu übergeben, das hingegen würde funktionieren:

Code: Alles auswählen

aProcess := TProcess.Create(nil);
    aProcess.CommandLine := 'C:\Programme\irfanview\i_view32.exe ' +
    '"' + StringGrid.Cells[2, i] + '"';
    aProcess.Options := AProcess.Options + [poWaitOnExit];
    aProcess.Execute;
    aProcess.Free;

Gibt es aber auch einen einfachen Weg, es ähnlich wie bei ShellExecute nur durch Übergabe der Dateiadresse zu schaffen, vielleicht durch eine Änderung in CommandLine? (Wie gesagt, ist nur für den Hausgebrauch und daher will ich die Kirche im Dorf lassen.)

Vielen Dank für jede Meldung
Aldicek

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Dateibetrachter über TProcess starten

Beitrag von theo »

In Unit LCLIntf gibt es
function OpenDocument(APath: String): Boolean;

aldicek
Beiträge: 37
Registriert: Do 6. Mär 2008, 12:48
OS, Lazarus, FPC: WinXP/Mint13KDE (Lazarus 1.0.8 FPC 2.6.2)
CPU-Target: 64 Bit
Wohnort: Halle (Saale)

Re: Dateibetrachter über TProcess starten

Beitrag von aldicek »

Vielen Dank!

Genau so etwas suchte ich.

Grüße
Aldicek

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Dateibetrachter über TProcess starten

Beitrag von theo »

Übrigens: Gleichzeitiges Crossposting ist nicht so toll.
http://www.lazarus.freepascal.org/index ... n.html#new

Antworten