RemoveDir ohne Erfolg
-
Nein, auch im Explorer wird der Ordner als leer dargestellt. (Ja, ich habe im Explorer "versteckte Dateien anzeigen" aktiviert!) Aber danke, später könnte das wirklich ein Problem geben. Aber das ist ein anderes Thema.
Übrigens: Danke für die schnelle Antwort.
-
Hat sonst jemand ne Idee?
-
Plemplem,
Plemplem schrieb:
Hat sonst jemand ne Idee?
Vorschlag: vereinbare eine Testumgebung - z.B. irgendwas unter c:\temp und simuliere dort, was Du in Deiner Anwendung machen willst, damit wir diese Sitution leichter nachstellen können. Und gib uns für dieses Beispiel etwas mehr Code - insbesondere: was genau steht denn eigentlich in dem alles entscheidenden "TempDir" ???
-
http://www.winapi.net/index.php?inhalt=s21
Willst du kein Progress-Fenster angezeigt bekommen, dann schreibst du bei den Flags FOF_SILENT anstatt FOF_SIMPLEPROGRESS und lässt die letzte Zeile (shfs.lpszProgressTitle = ...) einfach weg.
-
dschensky, TempDir war nicht von mir... Das Problem von mir ist einfach RemoveDir. Da passiert einfach nichts. (Es gibt halt false zurück. Immer.) Wüsste daher nicht, was ich groß für Code schreiben könnte. Einfach RemoveDir mit den Parametern...
WebFritzi, der Link sieht gut aus. Werde ich mal ausprobieren; Danke.
-
Plemplem schrieb:
dschensky, TempDir war nicht von mir... Das Problem von mir ist einfach RemoveDir.
Na gut, dann eben anders herum: ich habe ein Verzeichnis erstellt: "c:\temp\deleteme" und dann das hier:
String dir = "c:\\temp\\deleteme"; RemoveDir(dir);
Und das Verz. wird gelöscht. Keine Probleme ...
Edit: ... es sei denn, das zu löschende Verz. wurde vorher zum current dir gemacht. Dann kann man es offenbar nicht löschen. Ich vermute mal, da liegt Dein Problem.
-
Wer Code will, soll auch Code haben
:
AnsiString file = "C:\\killme";//steht natürlich nicht SO im Code... if (!RemoveDir(file))//Klappt nie. ShowMessage("Verzeichnis konnte nicht gelöscht werden!");
Als ich vorher ein neues Projekt hatte und dein Beispiel ausprobiert habe, hat alles geklappt. Jetzt habe ich den gleichen Text in mein jetziges eingefügt und schon ging nix mehr. Wie kriege ich das Current Dir heraus?
-
hast es dir schon fast selber beantwortet: GetCurrentDir
-
Argh! Dieses blöde Get!!! So kann man ja nix finden!
Tja... leider ist mein CurrentDir nicht mein zu löschendes Dir...
Also wieder keinen Schritt weiter.
-
Plemplem,
Plemplem schrieb:
Tja... leider ist mein CurrentDir nicht mein zu löschendes Dir...
Also wieder keinen Schritt weiter.
dann bleibt noch die Möglichkeit, daß Dein eigener Quellcode, eine der in Deinem Programm verwendeten Komponenten oder ein anderes Programm gerade Zugriff auf das Verzeichnis hat. Um das alles herauszubekommen, kannst Du Deinen Code analysieren und verdächtige Stellen testhalber auskommentieren bzw. die verdächtigen Komponenten irgendwie deaktivieren. Falls ein externes Programm zugreift, kann ich den "Process Explorer" empfehlen, den es unter http://www.sysinternals.com/ als free ware gibt.
-
Alles unwahrscheinlich. So toll ist mein Programm nicht. Und andere Programme sollten sich nicht für nen mit Müll gefüllten Ordner interressieren...
-
Plemplem schrieb:
Alles unwahrscheinlich...
Ja ja, wie war das mit den kotzenden Pferden ... ?
Hast Du vielleicht etwas von Deinem Projekt selbst in dem Verzeichnis zu liegen? Dann könnte es nämlich auch der CBuilder sein. Der klammert sich gern an die benutzten Verzeichnisse.
-
@Plemplem: Was stellst du dich so an? Wozu das CurrentDir herausbekommen??? Mit meinem Link hast du doch ein Verfahren, was ganz sicher das zu löschende Verzeichnis löscht.
-
Ja, du hast ja recht. Ich finde es einfach komisch, dass RemoveDir nicht klappt!
-
Immer dieses verdammte AnsiString/char-Theater:
AnsiString Path = "C:\\Temp\\a\\b"; SHFILEOPSTRUCT shfs; // hier kommt rein was zu tun ist.. // erst die Struktur füllen shfs.hwnd = NULL; shfs.wFunc = FO_DELETE; // Löschen wollen wir ;) shfs.pFrom = "C:\\Temp\\a\\b\0"; //klappt //shfs.pFrom = Path.c_str(); klappt nicht shfs.pTo = NULL; shfs.fFlags = FOF_SIMPLEPROGRESS ; // den Benutzer ein Fortschrittsfenster anzeigen shfs.lpszProgressTitle = "Fortschritt des Löschvorgangs"; // Text dieses Fensters // Löschvorgang durchführen SHFileOperation (&shfs);
Warum gehts mit der "Path"-Variable nicht? Jaja, ich sehe ja, dass bei der direkten Zuweisung noch ein \0 dran hängt. Aber das bekomme ich nicht hinten dran.
-
So macht man das:
void __fastcall Piss_Off_Dir(AnsiString Path) { TCHAR lpstPath[MAX_PATH]; SHFILEOPSTRUCT shfs; // hier kommt rein was zu tun ist.. // erst die Struktur füllen shfs.hwnd = NULL; shfs.wFunc = FO_DELETE; // Löschen wollen wir ;) lstrcpy(lpszPath, Path.c_str()); lpszPath[lstrlen(lpszPath) + 1] = '\0'; shfs.pFrom = lpszPath; shfs.pTo = NULL; shfs.fFlags = FOF_SIMPLEPROGRESS ; // den Benutzer ein Fortschrittsfenster anzeigen shfs.lpszProgressTitle = "Fortschritt des Löschvorgangs"; // Text dieses Fensters // Löschvorgang durchführen SHFileOperation (&shfs); }
-
Also so langsam dreh ich durch
:
---------------------------
Fehler beim Löschen der Datei oder des Ordners
---------------------------
Der Ordner Kopie von killme kann nicht entfernt werden: Eine Zugriffsverletzung ist aufgetreten.Die Quell- oder Zieldatei ist möglicherweise geöffnet.
---------------------------
OK
---------------------------Nein, sie ist NICHT geöffnet! Sie steht nur ein einer FileView-Box, die sowieso nicht aktualisiert wird! Und in einem Treeview, das auch auf keine Änderungen reagiert.
-
Ja, woran kann das liegen? An Win2000Prof?
Wenn in dem Verzeichnis Dateien oder Unterordner sind, werden die brav gelöscht. Die Löschanzeige rattert bis zum Ende durch und da kommt dann die Zugriffsverletzung. Die Abfrage, ob gelöscht werden soll, kommt auch normal.@dschensky... hast du deinen letzten Post geändert? Oder hab ich den überlesen? Kann doch fast nicht sein... Sorry.
Was meinst du mit kotzenden Pferden? Geht doch gar nicht...? Oder wie oder häh? Das Verzeichnis ist leer. Jungfräulich erstellt, extra für den Zweck sich zu opfern.
-
Krass... es liegt tatsächlich an meinem Programm. Es werden da aber nur die Ordner in eine Listview und eine Treeview geschrieben. Aber es besteht doch gar keine Verbindung?!? Ich schreibe es nur am Anfang rein und das wars! Auf Veränderungen (z.B. im Explorer) reagiert das Tool gar nicht.
Kann man die Verbindung zwischen meinem Tool und den Dateien irgendwie kappen?
-
Plemplem schrieb:
Krass... es liegt tatsächlich an meinem Programm. Es werden da aber nur die Ordner in eine Listview und eine Treeview geschrieben.
Mmmmh, das Verzeichnis, welches sich nicht löschen lassen will ist nicht zufällig das zuletzt gefundene oder?...
-junix