[erledigt]SHFILEOPSTRUCT Datein in Verwendung überspringen.
-
Guten Abend,
ich habe vor kurzem mit VC++ angefangen und soweit läuft alles ganz okay.
Ich habe nun leider ein Problem mit der SHFILEOPSTRUCT Struktur in meinem Programm.Ich möchte in ein Verzeichnis alle Dateien inkl. Unterordner löschen.
Das funktioniert auch solange gut, solange keine Datei von einem anderen Programm verwendet wird. Sobald dies der Fall ist, werden überhaupt keine Dateien gelöscht.
Als Flags verwende ich FOF_NOCONFIRMATION und FOF_NO_UI.Entferne ich FOF_NO_UI erhalte ich eine Dialogbox bei der ich die in Verwendung befeindeten Dateien überspringen kann. Dann werden alle Dateien gelöscht, bis auf die in Verwendung.
Ich möchte aber die Dialogbox unterdrücken, kann ich irgendwie mit unterdrückter Dialogbox die Dateien löschen? Bzw. die Benutzten überspringen?
Gruß, Taz
-
Dateien, die in Verwendung sind kann man nicht löschen. Man kann sie höchstens vormerken, damit sie beim nächtsne Reboot gelöscht werden. Siehe:
http://msdn.microsoft.com/en-us/library/aa365240
-
FOF_NO_UI schließt FOF_NOCONFIRMATION.
So wie ich die Doku lese, geht das nicht.
Wenn die Operation fehl schlägt bricht er ab.Du müsstest einfach das Löschen selber in die Hand nehmen und Löschen was geht... So schwierig ist das auch nicht.
-
Hi,
danke für eure Antworten. Das man Daten nicht löschen kann, die in Verwendung sind, ist klar. Das FOF_NO_UI FOF_NOCONFIRMATION einschließt, habe ich garnicht gesehen, danke!Wie kann ich die Daten von hand löschen? Bzw. welche Funktionen soll ich mir einmal anschauen.
Gruß
-
Zum Löschen:
http://msdn.microsoft.com/en-us/library/aa365240Ansonsten: FindFirstFile/FindNextFile/FindClose
-
Okay, mit FindFirstFile und FindNextFile finde ich alle Dateien und Verzeichnisse nur leider klappt das löschen nicht ganz.
Ich bau mir den Pfad zur Datei zusammen und versuche mit
MoveFileEx(file,NULL,MOVEFILE_COPY_ALLOWED);
die Datei zu löschen, leider passiert nichts.
Hab ich etwas in der Doku bzw. Funktion falsch verstanden? Wo liegt der Fehler?
Edit: Ich habe es nun mit RemoveDirectory und DeleteFile gelöst. Klappt super.
Gruß