Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ordner nebst Unterordnern durchsuchen (https://www.delphipraxis.net/151023-ordner-nebst-unterordnern-durchsuchen.html)

Gargamel 3. Mai 2010 17:10


Ordner nebst Unterordnern durchsuchen
 
Hallo

Ich will Ordner und alle Unterordner nach Dateien rekursiv durchsuchen. Wenn ich die Rekursion entferne, funktioniert alles. Sobald allerdings die Funktion in sich nochmal aufgerufen wird, schmiert mein Programm ab. Hier der Code:

Delphi-Quellcode:
procedure FindAllFiles(aPath:string; aMask:string; aAttr:integer);
var aRes:TSearchRec;
    EOFound:boolean;
    Filename:string;
    fileAttr:integer;
Begin
  EOFound:=false;
  if FindFirst(aPath+aMask,aAttr,aRes) < 0  then exit;

  while not EOFound do
  Begin
    Filename:=aRes.Name;
    fileAttr:=FileGetAttr(Filename);
    if (fileAttr and faDirectory)=faDirectory then
    Begin
      if (Filename<>'.') and (Filename<>'..') then FindAllFiles(aPath+Filename+'\',aMask,aAttr);
    End
    else
    list.add(filename);

    EOFound:=(FindNext(aRes)<>0);
  End;
  FindClose(aRes);
end;
Achso, "list" ist hier vom Typ TStringList. Dort sollen dann halt alle gefundenen Dateien aufgelistet werden.

SirThornberry 3. Mai 2010 17:22

Re: Ordner nebst Unterordnern durchsuchen
 
Kannst du "schmiert ab" genauer beschreiben? Das würde einem unter Umständen sogar einen Blick auf den Quellcode ersparen.

lbccaleb 3. Mai 2010 17:22

Re: Ordner nebst Unterordnern durchsuchen
 
Vor kurzem wurde hier ne gute Klasse für sowas reingestellt, vllt währe das was für dich, wenn es nun auch nicht direkt was zu dem Problem ist:

FinFilesCls

Gargamel 3. Mai 2010 17:25

Re: Ordner nebst Unterordnern durchsuchen
 
@SirThornberry:

access violation at 0x7c91e8e6: write of address 0x00030ffc

@ lbccaleb:

Danke, ich schaue mal.

SirThornberry 3. Mai 2010 17:46

Re: Ordner nebst Unterordnern durchsuchen
 
Ich sehe gerade was ganz anderes was vielleicht auch den Fehler auslöst:
Delphi-Quellcode:
fileAttr:=FileGetAttr(Filename);
1.) Das ganze ist zum scheitern verurteilt weil Filename bei dir nur der relative Dateiname zum aktuell durchsuchten Pfad ist und somit wird die Datei so gut wie nie gefunden.
2.) Das ganze ist überflüssig da du die Dateiattribute bereits im TSearchRec hast welches durch FindFirst und FindNext gefüllt wird.

himitsu 3. Mai 2010 19:04

Re: Ordner nebst Unterordnern durchsuchen
 
Zitat:

Zitat von lbccaleb
Vor kurzem wurde hier ne gute Klasse für sowas reingestellt, vllt währe das was für dich, wenn es nun auch nicht direkt was zu dem Problem ist:

FinFilesCls

Erstmal das :angel2:

Dann gibt es auch noch einige andere FindAllFiles-Funktionen in der DP und CodeLib.
Hier im Forum suchenFindAllFiles & FindAllFilesFindAllFiles

Zitat:

Zitat von Gargamel
access violation at 0x7c91e8e6: write of address 0x00030ffc

Und an welcher Stelle/CodeZeile tritt diese Exception auf?


[add]
Der Gund ist
Zitat:

Code:
if FindFirst(aPath+aMask,aAttr,aRes) [color=#ff0000][b]<[/b][/color] 0 then exit;

Es stimmt zwar, daß viele Fehlercodes negativ (31. Bit gesetzt > OLE Error Codes = Severity-Flag),
aber
Delphi-Quellcode:
{ The system cannot find the file specified. }
ERROR_FILE_NOT_FOUND = 2;
Zitat:

FindFirst returns 0 if a file was successfully located, otherwise, it returns an error code.
Die Umkehrung von =0 ist <>0 :warn:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz