Procedure FindFiles (aPath, aFindMask:
String; aWithSub: Boolean; aResult: tStrings);
Var
FindRecord: tSearchRec;
tempstr:
String;
Begin
//
Form1.StatusBar1.SimpleText:='
Starte die Suche ...';
//
// Quelle: http://www.entwickler-ecke.de/topic_nach+Dateien+suchen_1107,0.html
//
// Wenn die Stringliste nil ist oder aPath oder aFind nicht angegeben ist
// dann raus
If (aPath = '
')
or (aFindMask = '
')
or Not Assigned (aResult)
Then
Exit;
// Wenn am Ende der Pfadangabe noch kein \ steht, dieses hinzufügen
// (Oder die Funktion IncludeTrailingPathDelimiter aus der Unit SysUtils.pas verwenden)
If aPath[Length (aPath)] <> '
\'
Then
aPath := aPath + '
\';
// Im aktuellen Verzeichnis nach der Datei suchen
If FindFirst (aPath + aFindMask, faAnyFile, FindRecord) = 0
Then
Repeat
begin
If (FindRecord.
Name <> '
.')
and (FindRecord.
Name <> '
..')
Then
// ...Ergebnis in die Stringlist einfügen
// Gesammter Zugriffspfad incl. Dateiname und Extention darf nicht länger als 160 Zeichen sein
if length(aPath + FindRecord.
Name) > 160
then
Begin
tempstr:= aPath + '
,'+ FindRecord.
Name +'
,Zugriffpfad zu lang! Länge: '+InttoStr(length(aPath + FindRecord.
Name))+'
(max. 160)';
aResult.Add (tempstr);
end;
// Probleme bei der erneuten Archivierung
if length(aPath + FindRecord.
Name)+40 > 160
then
Begin
tempstr:= aPath + '
,'+ FindRecord.
Name +'
,Erneute Archivierung nicht möglich!';
aResult.Add (tempstr);
end;
// Der Dateiname darf nicht länger als 32 Zeichen sein
if length(FindRecord.
Name) > 32
then
Begin
tempstr:= aPath + '
,'+ FindRecord.
Name +'
,Projektname zulang! Länge: '+InttoStr(length(FindRecord.
Name))+'
(max. 32)';
aResult.Add (tempstr);
//(aPath + FindRecord.Name);
end;
// Der Pfad darf nicht länger als 128 Zeichen sein
if length(aPath) > 128
then
Begin
tempstr:= aPath + '
,'+ FindRecord.
Name +'
,Projektpfad zulang! Länge: '+InttoStr(length(aPath))+'
(max. 128)';
aResult.Add (tempstr);
//(aPath + FindRecord.Name);
end;
// Es dürfen nur bestimmte Zeichen im Dateinamen sein
if HatStringSonderzeichen(KillExt(FindRecord.
Name))
then
Begin
tempstr:= FindRecord.
Name +'
,Sonderzeichen im Projektnamen!!!';
aResult.Add (aPath+'
,'+tempstr);
//(aPath + FindRecord.Name);
end;
Form1.StatusBar1.SimpleText:='
Suche ...';
Form1.StatusBar1.Refresh;
end;
Until FindNext (FindRecord) <> 0;
FindClose (FindRecord);
// Wenn nicht in Unterverzeichnissen gesucht werden soll dann raus
If Not aWithSub
Then
Exit;
// In Unterverzeichnissen weiter suchen
If FindFirst (aPath + '
*.*', faAnyFile, FindRecord) = 0
Then
Repeat
If (FindRecord.
Name <> '
.')
and (FindRecord.
Name <> '
..')
Then
// Feststellen, ob es sich um ein Verzeichnis handelt
If Boolean (FindRecord.Attr
and faDirectory)
Then
// Funktion erneut aufrufen, um Verzeichnis zu durchsuchen (Rekursion)
FindFiles (aPath + FindRecord.
Name, aFindMask, aWithSub, aResult);
Until FindNext (FindRecord) <> 0;
FindClose (FindRecord);
Form1.StatusBar1.SimpleText:='
Die Suche ist Beendet';
End;