Code:
procedure tF_Backup.Entfernen (von,nach : String);
var Search : TSearchRec;
begin
von := IncludeTrailingBackslash(von);
nach := IncludeTrailingBackslash(nach);
if FindFirst(nach+'*.*', faAnyFile, Search) = 0 then
repeat
if (not fileexists (von + Search.Name))
and FileExists (nach + Search.Name)
then deleteFile (nach + Search.Name);
until FindNext (Search) <> 0;
if FindFirst(nach+'*.*', fadirectory, Search) = 0
then
repeat
if ((search.Attr and fadirectory) = fadirectory) and (Search.name[1] <> '.')
then Entfernen (von+Search.Name+'\',nach + Search.Name + '\');
until FindNext (Search) <> 0;
Findclose (Search);
if not DirectoryExists (von)
then RmDir (nach);
end;
hier der vereinfachte Code...
er vergleicht 2 ordner auf den selben inhalt und passt den einen dem anderen an, sprich löscht, was nicht im einen vorhanden ist.
jetzt könnte man ja meinen, da die funktion rekursiv ist, dass die drüberliegende Funktion noch auf die Daten zugreift. Es funktioniert selbst dann nicht, wenn ich während der suche eine Liste erstelle und anschließend nach der suche diese liste durchgehe und jedes einzelne element lösche. Vor der Suche besteht kein Zugriff. Also kann es ja an nichts anderem liegen. Ich möchte allerdings nicht das ganze Programm neu starten müssen, nur damit ich wieder auf die daten zugreifen kann...
merkwürdig ist auch, dass die Dateien gelöscht werden können...
Ich habe getcurrentdir ausgeführt und das ergebnis "desktop" erhalten, welches in keinster Weise mit meinem Aufruf in Verbindung gebracht werden kann...