Laden...

[gelöst] Windows Dialog zum Löschen von Ordnern aus eigenem Programm heraus benutzen

Erstellt von 1mannlan vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.844 Views
1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 12 Jahren
[gelöst] Windows Dialog zum Löschen von Ordnern aus eigenem Programm heraus benutzen

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?

771 Beiträge seit 2009
vor 12 Jahren

Und die Suche nach "C# SHFileOperation" führt z.B. nach C# does Shell, Part 2

S
269 Beiträge seit 2010
vor 12 Jahren

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

2.298 Beiträge seit 2010
vor 12 Jahren

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 |

1
1mannlan Themenstarter:in
88 Beiträge seit 2009
vor 12 Jahren

Das Problem ist dann wohl gelöst, Danke an inflames2k!
(Natürlich auch an die anderen Poster 😃)