Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi problem mit FindAllFiles (codelib) (https://www.delphipraxis.net/92023-problem-mit-findallfiles-codelib.html)

Marco Steinebach 13. Mai 2007 14:27


problem mit FindAllFiles (codelib)
 
Huhu Listers,
ich hab gerade die wirklich gute Prozedur in der CodeLib gefunden, mir ist auch der Aufbau und so klar, aber ich fühl mich im Moment 'n bißchen wie ein echter Newbee.
1. kennt mein Delphi 5 kein IncludeTrailingPathDelimiter, sondern bestenfalls ein IncludeTrailingBackslash, aber schlimmer ist
2. das es behauptet bei
Delphi-Quellcode:
FindClose (sr);
seien Cardinal und TSearchRec inkompatible typen. Seh ich auch ein, ;-), aber laut hilfe gibt's FindClose zweimal, einmal mit Handle und einmeal mit SearchRec? Warum zum teufel weigert sich mein Compiler das zu fressen?
SysUtils ist drin?
Hiiiiiiilfe!!!!
Viele herzliche Grüße
Marco
... der ganze Code hängt hier drunter...
Delphi-Quellcode:
procedure FindAllFiles(
var FileList: TStrings;
RootFolder: string;
Mask: string = '*.*';
Recurse: Boolean = True);
var
SR: TSearchRec;
begin
RootFolder := IncludeTrailingBackslash(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); // hier knallt's dann!
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); // hier logischerweise auch.
end;
end;

marabu 13. Mai 2007 14:56

Re: problem mit FindAllFiles (codelib)
 
Hallo Marco,

du kannst die Reihenfolge der Units Windows und SysUtils in der Uses Klausel vertauschen oder deine Prozedur FindClose() mit dem Unit-Namen qualifizieren: SysUtils.FindClose(sr);

Grüße vom marabu

Marco Steinebach 13. Mai 2007 20:08

Re: problem mit FindAllFiles (codelib)
 
Hi Marabu,
Zitat:

Zitat von marabu
du kannst die Reihenfolge der Units Windows und SysUtils in der Uses Klausel vertauschen oder deine Prozedur FindClose() mit dem Unit-Namen qualifizieren: SysUtils.FindClose(sr);

Vielen herzlichen Dank! das war's!

Viele Grüße
Marco

Elvis 13. Mai 2007 21:53

Re: problem mit FindAllFiles (codelib)
 
Zitat:

Zitat von marabu
du kannst die Reihenfolge der Units Windows und SysUtils in der Uses Klausel vertauschen oder deine Prozedur FindClose() mit dem Unit-Namen qualifizieren: SysUtils.FindClose(sr);

Boah! Wie ich das an Delphi hasse! Und zwar, dass er keine Fehlermeldung mit der Pflicht wirft, solche Name clashes durch den Unitnamen aufzulösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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-2025 by Thomas Breitkreuz