Hallo,
für ein Programm hatte ich schon vor einiger Zeit einen Algorithmus geschrieben, um einen Ordner so vollständig wie möglich zu löschen, das ganze hat aber nicht immer glatt funktioniert und eine aktuellen Status gibt es nicht:
private bool DeleteCompleteFolder(string Folder)
{
bool Errorfree = true;
foreach (string dir in Directory.GetDirectories(Folder))
{
DeleteCompleteFolder(dir);
}
//Delete all Files
foreach (string file in Directory.GetFiles(Folder))
{
try
{
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);
}
catch
{
Errorfree = false;
}
}
//Delete emtpy Directory
try
{
File.SetAttributes(Folder, FileAttributes.Normal);
Directory.Delete(Folder);
}
catch
{
Errorfree = false;
}
return Errorfree;
}
Ordner werden zwar meist gelöscht, manchmal kommt es aber vor, das ein löschen nicht möglich ist, im zweiten Anlauf klappt es dann.
Nun war meine Idee dem ganzen vielleicht auf komplett anderem Wege entgegenzuwirken.
Wäre es nicht möglich das löschen Windows zu überlassen? Damit würde ich sämtliche fliegen mit einer Klappe schlagen (Fortschritt usw...)
Etwas hatte ich dazu gefunden:
Code-Snippet: Datei mittels Windows Dialog löschen
Nur kann ich mit VB Code nicht wirklich was anfangen, ein VB zu C# Converter bringt keinen lauffähigen Code.
Oder habt ihr vielleicht eine bessere Idee?
Zusatzinformation:
Die Shell32.dll muss man nicht einmal via P/Invoke aufrufen, sie lässt sich einfach als normaler Verweis hinzufügen (es wird dann automatisch eine Interop.Shell32.dll hinzugefügt)
Dann kann man mit Shell _Shell = new Shell(); ein Shell-Objekt erstellt werden und über _Shell.NameSpace(string s); erstellt man dann die anderen benötigten Objekte, zum Beispiel Shell32.Folder etc.
Und darüber geht dann auch garantiert das Löschen mit der Windows-Funktion
so far
Karill Endusa
Die Umsetzung des VB Codes in C# sollte eigentlich kein Problem darstellen. Da es mich selbst interessiert hat, habe ich das mal gemacht.
Das funktionierende (aber eventuell nicht perfekte) Resultat ist findest du in ShellProvider - Delete, Move, Copy .
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Das Problem ist dann wohl gelöst, Danke an inflames2k!
(Natürlich auch an die anderen Poster 😃)