Zitat von
bluescreen25:
Wow, ansatzweise hatte ich das auch noch so hinbekommen, scheiterte an Einzelheiten...zumindest bin ich jetzt in der Lage, weitere Teilfunktionen zu erstellen, ich denke, ich habs verstanden...
Vielen Dank..
Delphi-Quellcode:
function FindLastDir(sDirectory : string) : string;
var
SearchRec : TSearchRec;
begin
sDirectory := IncludeTrailingPathDelimiter(sDirectory);
result := sDirectory; //Hier wird dem result der aufrufende String zugewiesen, da sonst immer ein leerer String zurückgegeben wird --> Siehe Erklärung unten
if FindFirst(sDirectory + '*.*', faDirectory, SearchRec) = 0 then
begin
try
repeat
if ((SearchRec.Attr and faDirectory) = faDirectory) and(SearchRec.Name <> '.') and
(SearchRec.Name <> '..') then
begin
result := FindLastDir(sDirectory + SearchRec.Name);
break;
end;
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
end;
end;
Gruß, bluescreen25
Die Funktion ist rekursiv.
Angenommen ich habe einen Verzeichnisbaum der so aussieht,
Zitat:
C:\Ebene1\Ebene2\Ebene3\Ebene4\
Ich rufe meine Funktion so auf:
FindLastDir('C:\Ebene1')
Code:
Dann sieht Result so aus:
1. Aufruf:
1. Zuweisung: result = 'C:\Ebene1\'
2. Aufruf:
1. Zuweisung: result = 'C:\Ebene1\Ebene2\'
3. Aufruf:
1. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\'
2. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\Ebene4\'
4. Aufruf:
1. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\Ebene4\' // --> 2.Zuweisung wir nicht ausgeführt!
kehrt zurück zum
3. Aufruf:
2. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\Ebene4\'
break;
kehrt zurück zum
2. Aufruf:
2. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\Ebene4\'
break;
kehrt zurück zum
1. Aufruf:
2. Zuweisung: result = 'C:\Ebene1\Ebene2\Ebene3\Ebene4\'
break;
kehrt zurück zu
Deinem Aufruf, du erhälst: 'C:\Ebene1\Ebene2\Ebene3\Ebene4\'
würde nun die 1. Zuweisung im 4. Aufruf fehlen erhälst du immer: ''
Daraus folgt der Rückgaberwert der Funktion ist immer der im letzten Aufruf ermittelt String.
Ich hoffe ich habe dir die Gedankengänge die zu dieser Zuweisung geführt haben etwas verdeutlichen können