Hallo, ich weiss das die Frage schon oft genug gestellt worden ist. "Wie löscht man Verzeichnisse"? Es ist dabei egal, ob in dem Verzeichnis was drinsteht oder nicht. Mit RmDir haut es nicht hin, I/O Fehler 103. Warum weiss ich bis heute nicht. Jetzt habe ich mich entschieden, die API-Funktion zu nutzen. Mein Quelltext sieht folgendermaßen aus.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| Function TTManager.DeleteNode(Node : TTreeNode) : Boolean; Var Done : Boolean; newData : PData; FileName, Directory, xStrng : String; sFile : TSHFileOpStruct; Begin DeleteNode:=False; Done:=False; Repeat If Node.getFirstChild <> Nil Then DeleteNode(Node.getFirstChild) Else Begin Done:=True; newData:=Node.Data; If newData.Data = dUser Then xStrng:='.u' Else If newData.Data = dFolder Then xStrng:='.f' Else xStrng:='.l'; If (newData.Data = dUser) Or (newData.Data = dFolder) Then Begin Directory:=Root + '\' + Path(Node) + Node.Text + xStrng; DeleteFiles(Directory); sFile.Wnd:=$0; sFile.wFunc:=FO_Delete; sFile.pFrom:=PChar(Directory); sFile.pTo:=#0#0; sFile.fFlags:=FOF_NoConfirmMKDir Or FOF_Silent Or FOF_NoConfirmation; sFile.hNameMappings:=Nil; sFile.lpszProgressTitle:=Nil; SHFileOperation(sFile); End Else Begin FileName:=Root + '\' + Path(Node) + Node.Text + xStrng; If FileExists(FileName) Then DeleteFile(FileName); End; End; Until Node.getFirstChild = Nil; TreeView.Items.Delete(Node); DeleteNode:=True; End; |
Nun zu meinem Problem. Das Programm löscht die Verzeichnisse aber trotzdem nicht. Es kommt dummerweise auch kein Fehler. Wenn ich "FOF_NoConfirmation" rausnehme fragt mich Windows auch, ob ich die Verzeichnisse wirklich löschen will. Klicke ich dann auf "Ja" wird aber immer noch nichts gelöscht. Was mache ich denn da falsch?
lg Torsten
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.