Das Prog benennt Dateien um. Man kann auswählen, ob man Dateien, Verzeichnisse oder beide auf einmal bearbeiten lassen will. Außerdem geht das ganze auch in die Verzeichnisse rein.
Folgende ist die rekursive Suchprozedur, eingebettet in die "Suchinterface-Prozedur". Variablen, die hier nicht deklariert sind, stehen in der übergeordneten.
Delphi-Quellcode:
procedure suche(pfad:string);
var slDirDirs:tStringList; c:integer;
begin
slDirFiles.clear; slDirDirs:=tStringList.create;
if filenames then begin // Dateien sollen gesucht werden
i:=findfirst(pfad+fm.egMaske.text,$67,attribs); // Dateien suchen
while (i=0) and (fm.aTest.tag=1) do begin // aTest.tag=0 ist Abbruch (Button gedrückt)
application.processMessages;
slDirFiles.Add(pfad+attribs.name); // sl* sind Stringlists
inc(cFiles); // Zählvari für spätere Statistik
i:=findnext(attribs)
end;
if fm.cbSorted.Checked then slDirFiles.Sort // ggf. sortieren, wenn angekreuzt
end;
findclose(attribs);
// Und das ganze nochmal für Verzeichnisse
// Habe schon probeweise den oberen Teil rausgenommen, half aber nichts
i:=findfirst(pfad+fm.egMaske.text,$10,attribs); // Verzeichnisse suchen
while (i=0) and (fm.aTest.tag=1) do begin
if ((attribs.name<>'.') and (attribs.name<>'..')) then begin
application.processMessages;
slDirDirs.Add(pfad+attribs.Name+'\'); // der \ markiert den Pfad in der Liste als Verzeichnis
end;
i:=findnext(attribs)
end;
findclose(attribs);
if fm.cbSorted.Checked then slDirDirs.Sort;
slDateien.AddStrings(slDirFiles); // Dateien in die globale Liste übernehmen
if Recurse then
for c:=0 to slDirDirs.count-1 do suche(slDirDirs[c]); // Rekursiv in Unterverzeichnisse gehen
if dirNames then begin // Verzeichnisse in die Liste aufnehmen?
slDateien.addStrings(slDirDirs); // dann auch deren Namen in die globale Liste schreiben
inc(cDirs,slDirDirs.count)
end;
slDirDirs.free
end;
Das Problem ist jetzt, daß die Suche nach Verzeichnissen auch Dateien mit anfügt, obwohl ich nur nach Verzeichnissen suchen lasse (besagtes $10). Zur Laufzeit eindeutig daran zu erkennen, daß in der Liste hinter einem Dateinamen ein \ angefügt ist. Also Statt "Datei.txt" kommt dann "Datei.txt\". Und wenn ich auch nach Dateien suche, dann steht demzufolge einmal "Datei.txt" drin UND noch "Datei.txt\".
So, ich fahr jetzt erstmal nach Hause. Schüss