Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 5



BeitragVerfasst: Mo 10.12.18 17:28 
Hallo Freunde,
hänge an einem neuen Problem. Ich möchte Dateien in einer Stringgridliste und als Listview anzeigen und dabei nach Dateiendungen selektieren. Für einen einzigen Ordner ist alles gelöst.
Nun will ich die Programmfunktion auf mehrere Ordner erweitern.
Mein Lösungsansatz war wie folgt:
1. Ich wähle per FileOpenDialog einen Ordner aus und erhalte in einer FileListBox2 die Dateinamen des Verzeichnises.
2. Diese Dateinamen kopiere ich inklusive dem kompletten Pfad in eine zentrale FileListBox1
ausblenden Delphi-Quelltext
1:
2:
   for j:=0 to FileListbox2.Items.Count-1 do    // Pfad + Dateien in Box1 hinzufügen
     FileListbox1.Items.Add(vAktuPfad + '\' + FileListbox2.Items.Strings[j]);
3. Den Pfadname vom aktuell gewählten Ordner (vAktuPfad) merke ich mir in einer ListBox
4. Aus der FileListBox1 heraus bereite ich die StringGridliste und die Listview auf.
5. Diesen Vorgang wiederhole ich für alle gewünschten Ordner.

Meine FileListbox1 ist also der "Sammelbehälter" und enthält in den einzelnen Strings nicht nur den Dateinamen, sondern den komplett langen Pfad+Dateinamen. So weit so gut - funktioniert.
Nun mein Problem:
Selektiere ich über Parameter FileListBox1.Mask meine Dateien, dann werden die "unerwünschten" Dateien nicht nur ausgeblendet, sondern FileListBox1 wird automatisch komplett neu gefüllt. Da jedoch FileListBox1.Drive und FileListBox1.Directory nicht vorbesetzt werden können (mehrere unterschiedliche Pfade), ist mein "Sammelbehälter" weg und ich erhalte nur noch die Dateien aus meinem Programmpfad. Ich hoffe das Problem verständlich erläutert zu haben.

Welche Lösungsmöglichkeiten gibt es hier? Ich habe eine zweite FileListBox (1) gewählt, um per Mask-Befehl einfach zu selektieren - was bei einer normalen ListBox nicht der Fall ist. Hatte allerdings nicht damit gerechnet, dass bei Mask-Änderung der gesamte Ordner neu eingelesen wird (Denkfehler).
Eine Möglichkeit wäre nach einer Mask-Änderung in einer Schleife über alle gemerkten Ordner (siehe Pkt.3 ListBox) alle Ordner und Dateien neu einlesen (scheint mir jedoch aufwändig, da dahinter noch einiges mehr abläuft). Wie bearbeitet man mehrere Ordner?
Guter Rat ist willkommen.
hRb
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 10.12.18 18:54 
Guten Abend hRb,

um Ordner und Dateien zu ermitteln, sind derartige Komponenten garnicht notwendig.
Such' mal nach FindFirst, FindNext und TSearchRec.
Darüber solltest du einiges finden und passgenau einen Code zu deinem Problem entwickeln können.
Sonstiges:
- ExtractFilePath()
- ExtractFileDir()
- ExtractFileName()
- ExtractFileExt()
- FileExists()
- DirectoryExists()

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 5



BeitragVerfasst: Mi 12.12.18 00:03 
Hallo Frühlingsrolle,
Genannte Funktionen kenne ich alle, nutze auch viele davon im Programm, hilft aber nicht zur einfachen DateiSelection, z.B. aller Grafikdatei-Typen - es sei denn ich schreibe eine eigene Mask-Routine. Und selbst wenn, welches Objekt sollte Deiner Meinung nach der Container für alle Dateien sein? Letztlich muss auch dieses bei *.* wieder mit den Dateien aller Verzeichnisse gefüllt werden. Nachdem mein Programm für ein einziges Verzeichnis fertig programmiert ist und funktioniert, scheint mir eine Schleife (wie angedeutet) schneller realisiert. Geht eben bei vielen Dateien nur auf die Laufzeit. Fragt da heut noch jemand danach?
hRb
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10030
Erhaltene Danke: 1182

W2k .. W7pro .. W10ent
TP3 .. D7pro .. D10.1
BeitragVerfasst: Mi 12.12.18 00:49 
Moin!

Du hast bereits festgestellt, dass die von dir missbrauchten visuellen Komponenten für den gewünschten Zweck mindestens ungeeignet, wenn nicht gar völlig falsch sind. Andererseits hast du dich aber auch bereits entschieden, den angefragten und erhaltenen, guten Rat nicht anzunehmen. Also worüber diskutieren wir hier eigentlich?! :nixweiss:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6302
Erhaltene Danke: 122

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Mi 12.12.18 07:46 
Wie Narses schon schrieb und du auch festgestellt hast, ist dein Ansatz mit den Komponenten "ungünstig". Du musst offensichtlich einen Teil deiner Anforderungen selbst im Programm verwalten.

Leider steht in deinem Profil nicht, welche Delphi-Version du hast.

Es gibt schon seit ein paar Jahren die Klasse TDirectory mit der Klassen-Methode GetFiles.
Mit dieser kannst du auch rekursiv und mit Filter-Maske die Verzeichnisse durchsuchen lassen.

Weitere Klassen, die für dich in diesem Zusammenhang interessant sein könnten, sind TFile und TPath.
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 5



BeitragVerfasst: Mi 12.12.18 17:24 
Tut mir Leid, wenn ich mit meinem Einwand den "heiligen Zorn" der Experten erregt habe.
Hätte ja sein können, dass es an der FileListbox ein unbekanntes "Schräubchen" gibt, das die automatische Aktualisierung zeitweise unterbindet. Bei soviel fachlichem Gegenwind werde ich wohl meinen Ansatz neu überdenken. Danke jedenfalls für alle bisherige und hoffentlich auch künftige Hilfe.
PS: arbeite mit Delphi Berlin 10.2
hRb
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6302
Erhaltene Danke: 122

Windows 7 + Windows 10
Tokyo Prof + CE
BeitragVerfasst: Do 13.12.18 07:58 
user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
Tut mir Leid, wenn ich mit meinem Einwand den "heiligen Zorn" der Experten erregt habe.

Ich denke, weder Narses noch ich wollten, dass das so bei dir ankommt.
An sich ist es ja auch richtig, dass du erstmal bei deinem eingeschlagenen Weg nach einer Lösung suchst. Es klappt nur leider so nicht. Und mehr sollte unsere "Kritik" auch nicht aussagen.

Für diesen Beitrag haben gedankt: Narses