Ersatz für TWin32FindData / Dateien suchen
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Ersatz für TWin32FindData / Dateien suchen
Hallo!
Gibt es einen Ersatz für Win32FindData für Lazarus unter Linux? Oder gibt es eine Andere Möglichkeit, rekursiv in einem Ordner nach Dateien zu suchen?
Gibt es einen Ersatz für Win32FindData für Lazarus unter Linux? Oder gibt es eine Andere Möglichkeit, rekursiv in einem Ordner nach Dateien zu suchen?
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Dachte ich auch. Nachdem mein eigener (speziell für meine Zwecke angepasster) Code nicht funktioniert hat, habe ich den aus der DP ausprobiert, um zu sehen, ob die Suche unter Linux überhaupt funktioniert:
Doch auch dieser Listet unter Linux nur die Dateien im RootFolder auf, die in den Unterordnern werden nicht berücksichtigt.
Code: Alles auswählen
procedure FindAllFiles(var FileList: TStrings; RootFolder: string; Mask: string =
'*.*'; Recurse: Boolean = True);
var
SR: TSearchRec;
begin
RootFolder := IncludeTrailingPathDelimiter(RootFolder);
if Recurse then
if FindFirst(RootFolder + '*.*', faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory = faDirectory then
// --> ein Verzeichnis wurde gefunden
// der Verzeichnisname steht in SR.Name
// der vollständige Verzeichnisname (inkl. darüberliegender Pfade) ist
// RootFolder + SR.Name
if (SR.Name <> '.') and (SR.Name <> '..') then
FindAllFiles(FileList, RootFolder + SR.Name, Mask, Recurse);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
if FindFirst(RootFolder + Mask, faAnyFile, SR) = 0 then
try
repeat
if SR.Attr and faDirectory <> faDirectory then
begin
// --> eine Datei wurde gefunden
// der Dateiname steht in SR.Name
// der vollständige Dateiname (inkl. Pfadangabe) ist
// RootFolder + SR.Name
FileList.Add(RootFolder + SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
Zuletzt geändert von Targion am Di 8. Jan 2008, 20:20, insgesamt 1-mal geändert.
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Guckst Du hier...
http://www.lazarusforum.de/downloads.ph ... etail&id=9" onclick="window.open(this.href);return false;

http://www.lazarusforum.de/downloads.ph ... etail&id=9" onclick="window.open(this.href);return false;
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Die Demo funktioniert nicht richtig. Wenn ich auf den Button drücke, dann sucht das Tool nur im aktuellen Verzeichnis.
Zuletzt geändert von Targion am Di 8. Jan 2008, 14:13, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
http://lazarus-ccr.sourceforge.net/docs ... files.html" onclick="window.open(this.href);return false; 

Johannes
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
if SR.Attr and faDirectory = faDirectory then
daran liegt es in beiden schleifen verwendest du das.
Kann es ein das in deinem Verzeichnis keine Unterverzeichnisse sind ?
Ich verstehe den ersten Abschnitt so das er nur nach Verzeichnissen sucht aber nicht nach Dateien. Nim mal diese Zeile raus. Dann sollte es eigentlich gehen.
PS: Wo ist der unterschied zwischen Basteln und Programmieren(ist doch beides das gleiche oder ?)
daran liegt es in beiden schleifen verwendest du das.
Kann es ein das in deinem Verzeichnis keine Unterverzeichnisse sind ?
Ich verstehe den ersten Abschnitt so das er nur nach Verzeichnissen sucht aber nicht nach Dateien. Nim mal diese Zeile raus. Dann sollte es eigentlich gehen.
PS: Wo ist der unterschied zwischen Basteln und Programmieren(ist doch beides das gleiche oder ?)
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
@Monta:
Wenn alles so einfach wäre! Mit dem Befehl funktioniert's super! Danke!
@pluto: Hmm. Meinen wir das selbe Stück Code? Bei mir gibt es nur einen ähnlichen Teil, und dieser ist unbedingt notwendig, um einen Ordner zu identifizieren.
P.S: Wenn man etwas bastelt benutzt man schon oder nur Fertigteile. Beim Programmieren denkt man sich alles selbst aus (würde ich sagen
)
(Obwohl... Wenn es Code schon fertig gibt und man ihn versteht, wäre es ja blöd das Rad neu zu erfinden und den Code selbst nochmal zu erstellen.
)

@pluto: Hmm. Meinen wir das selbe Stück Code? Bei mir gibt es nur einen ähnlichen Teil, und dieser ist unbedingt notwendig, um einen Ordner zu identifizieren.
P.S: Wenn man etwas bastelt benutzt man schon oder nur Fertigteile. Beim Programmieren denkt man sich alles selbst aus (würde ich sagen

(Obwohl... Wenn es Code schon fertig gibt und man ihn versteht, wäre es ja blöd das Rad neu zu erfinden und den Code selbst nochmal zu erstellen.

-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Na ich weis nicht, in beiden Teil verwendest du diese Abfragen.
und du möchtest nur eine Datei liste bekommen.. Da stimmt auf jeden Fall was nicht.
Ich sehe gerade: Zeile 28 Hat mich etwas durch einander gebracht. Der Code scheint inordnung zu sein. Drücke doch mal bei FindFirst auf F1 da ist ein Prima beispiel bei... ich meine auch für rekusiv.
Ich denke der Fehler sollte schon gefunden werden....
Edit: jetzt sehe ich den Fehler: Die zweite schleife muss zu erst...
und du möchtest nur eine Datei liste bekommen.. Da stimmt auf jeden Fall was nicht.
Ich sehe gerade: Zeile 28 Hat mich etwas durch einander gebracht. Der Code scheint inordnung zu sein. Drücke doch mal bei FindFirst auf F1 da ist ein Prima beispiel bei... ich meine auch für rekusiv.
Ich denke der Fehler sollte schon gefunden werden....
Edit: jetzt sehe ich den Fehler: Die zweite schleife muss zu erst...
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Jupp, in der Suchroutine ist eine Zeile auskommentiert. Mit der kann man mit alle Dateien anzeigen lassen. Und bei mir durchsucht die auch alle Unterverzeichnisse im Hauptverzeichnis.Targion hat geschrieben:Die Demo funktioniert nicht richtig. Wenn ich auf den Button drücke, dann sucht das Tool nur im aktuellen Verzeichnis.
Kannst Dir ja spaßeshalber regular expressions einbauen. Dann geht auch noch mehr.
Zu beachten ist allerdings, das die Routine "case sensitiv" arbeitet. Alles Sachen die man leicht ändern kann...

Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)