Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1550 | Anzahl registrierter User: 1841 | Besucher online: 2
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Dateien und Ordner rekursiv löschen


Autor: freak
Sprache: C#
Bewertung: 8,2
(1 Bewertung)
Anzahl der Aufrufe: 31052
  
Kick it on dotnet-kicks.de  

Beschreibung:

Mit dieser Klasse können Dateien und Ordner rekursiv gelöscht werden. Die Methode wird nicht abgebrochen, wenn eine Datei nicht gelöscht werden kann (z.B: index.dat), sondern macht mit den nächsten Dateien weiter. Dadurch sind in dem Verzeichnisbaum nur noch nicht löschbare Dateien und Verzeichnisse vorhanden.

Die Methode System.IO.Directory.Delete("Path",true) würde auf eine Exception laufen und abbrechen. Dateien und Verzeichnisse, die eigentlich gelöscht werden könnten, bleiben übrig.


Abgelegt unter: delete, File, Directory, Datei, Verzeichnis, recursiv, rekursiv, löschen.



C#
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Collections.Generic;
using System.Text;


namespace Helper
{
    public class FileSystem
    {
        private static string _operationDirNotExist = "Can not find the directory";
        private static string _operationDirNotEmpty = "Directory is not empty"; 
        private static string _operationSuccess = "success";
        private static string _operationFailed = "failed";

        public static void DeleteAllSubfolders(string directoryPath)
        {
            //find files in the current directory an delete them
            foreach (string fileName in System.IO.Directory.GetFiles(directoryPath))
            {
                try
                {
                    System.IO.File.Delete(fileName);
                }
                catch 
                {
                    //Some files produce an exception if they cannot be deleted
                    //throw Exception ex; 
                }
            }
            //find subdirectorys in the current directory an delete them recursiv
            foreach (string directoryName in System.IO.Directory.GetDirectories(directoryPath))
            {
                DeleteAllSubfolders(directoryName);
                try
                {
                    //If no undeletable files are present the recursive search will be killed
                    System.IO.Directory.Delete(directoryName, true); 
                }
                catch 
                { 
                    //throw Exception ex; 
                }
            }    
        }

        public static string DeleteDirectory(string directoryPath, bool recursiv, bool deleteFiles)
        {
            string result = _operationFailed;
            if (System.IO.Directory.Exists(directoryPath))
            {
                if (recursiv == false && deleteFiles == false)
                {
                    System.IO.Directory.Delete(directoryPath, false);

                    if (System.IO.Directory.Exists(directoryPath))
                    {
                        result = _operationDirNotEmpty;
                    }
                    else
                    {
                        result = _operationSuccess;
                    }
                }

                if(recursiv == true && deleteFiles == false)
                {
                    System.IO.Directory.Delete(directoryPath, true);

                    if (System.IO.Directory.Exists(directoryPath))
                    {
                        result = _operationDirNotEmpty;
                    }
                    else
                    {
                        result = _operationSuccess;
                    }
                }

                if (recursiv == true && deleteFiles == true)
                {
                    System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(directoryPath);

                    DeleteAllSubfolders(directoryPath);

                    System.IO.Directory.Delete(directoryPath, true);

                    if (System.IO.Directory.Exists(directoryPath))
                    {
                        result = _operationDirNotEmpty;
                    }
                    else
                    {
                        result = _operationSuccess;
                    }
                }

                if (recursiv == false && deleteFiles == true)
                {

                    //find files in the current directory and delete them
                    foreach (string fileName in System.IO.Directory.GetFiles(directoryPath))
                    {
                        try
                        {
                            System.IO.File.Delete(fileName);
                        }
                        catch
                        {
                            //Some files produce an exception if they cannot be deleted
                            //throw Exception ex;
                        }
                    }

                    System.IO.Directory.Delete(directoryPath, false);

                    if (System.IO.Directory.Exists(directoryPath))
                    {
                        result = _operationDirNotEmpty;
                    }
                    else
                    {
                        result = _operationSuccess;
                    }
                }

            }
            else
            {
                result = _operationDirNotExist;
            }
            return result;
        }
    }
}
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

Tim Hartwig schrieb am:  25.11.2007 13:25:19

Hier Frage ich mich allerdings warum so viel aufwand wenn man das alles mit nur einer Zeile Code machen kann nämlich mit dem Befehl "System.IO.Directory.Delete" und als zweiten Paramter True für rekursives löschen. Dann wird der komplette Ordner gelöscht mit allen Dateien und Unterordnern.
freak schrieb am:  26.11.2007 09:53:09

Hallo Herr Hartwig,

sie haben natürlich Recht, aber wenn nicht löschbare Dateien in diesem Verzeichnis liegen, dann bricht die Methode "System.IO.Directory.Delete" mit einer Exception ab und Dateien, die eigentlich gelöscht werden könnten, bleiben liegen. Ich habe die Beschreibung der Methode angepasst.
m-s schrieb am:  11.02.2011 00:31:42

Um die schreibgeschützten Dateien doch zu löschen, habe ich Deine Schnipsel wie folgt verändert. Ob das gut ist weiß ich nicht aber bei mir funktioniert es.
            //find files in the current directory an delete them
foreach (string fileName in System.IO.Directory.GetFiles(directoryPath))
{
try
{
System.IO.File.Delete(fileName);
}
// Falls Datei schreibgeschützt, wird das Attribut geändert und die Datei noch mal versucht zu löschen
catch (UnauthorizedAccessException)
{
try
{
System.IO.File.SetAttributes(fileName, FileAttributes.Normal);
System.IO.File.Delete(fileName);
}
catch
{
}
}
catch
{
//Some files produce an exception if they cannot be deleted
//throw Exception ex;
}
}


Diese Snippets könnten für Sie interessant sein:
[VB.NET] Sich selbst löschende Anwendung
[VB.NET] Papierkorb leeren - VB und API
[C#] Alle markierten Items in einer CheckedListBox entfernen
[VB.NET] Prüfen ob Datei gerade benutzt wird
[C#] Abfragen ob eine Datei existiert
[C#] Datei umbenennen
[C#] File Owner / File Besitzer
[VB.NET] File Owner / File Besitzer
[C#] Generisches, komprimiertes, deserialisieren von Objekten
[VB.NET] Klasse für Dateisuche
[C#] LogWriter klasse
[C#] Datei-Eigenschaften zeigen (Eigenschaften-Fenster)
[C#] Prüfen, ob eine Datei ausfürbar ist (.exe, .bat, etc.)
[C#] eindeutigen Dateinamen ermitteln
[C#] Loads an embedded resource file of the calling assembly.
[ASP.net] Message in Logfile schreiben
[C#] Herausfinden welches Programm ein bestimmtes Dokument öffnet
[VB.NET] Gibt das Bytearray einer Datei zurück
[VB.NET] Erstellt aus einem Bytearray eine Temporäre Datei
[VB.NET] Klasse für SimpleFileVerification (SFV)
[C#] Laden und speichern von komprimierten Binärdaten
[C#] Datei im Windows-Explorer anzeigen und markieren
[C#] Dateilisten kopieren
[C#] File Container
[C#] PDF Dateien erstellen
[VB.NET] File List
[C#] SystemIconsImageListWrapper
[C#] Temporäre Datei mit using einfach nutzen/verwalten
[C#] Verzeichnis im Windows Explorer öffnen
[C#] Anzahl der Dateien in einem Ordner ermitteln
[C#] Verzeichnisauswahl Dialog (FolderBrowserDialog)
[C#] Prüfen ob in einem Verzeichnis Schreibrechte verfügbar sind!
[C#] Get Directory Size Recursively
[C#] Create Directory
[VB.NET] Datei im Explorer anzeigen und markieren
[C#] Datei anlegen
[C#] Aktuelles Verzeichnis auslesen
[VB.NET] CRC32 Hash einer Datei berechnen
[VB.NET] Den MD5 Hash einer Datei ermitteln
[VB.NET] Datei mittels Windows Dialog löschen
[VB.NET] Datei mittels Windows Dialog verschieben
[VB.NET] Datei mittels Windows Dialog kopieren
[VB.NET] Den SHA1 Hash einer Datei ermitteln
[C#] Dateien in die Zwischenablage kopieren
[ASP.net] Textdatei zum Download anbieten
[C#] MD5-Hash von Dateien ermitteln
[C#] Arraylist in Textdatei schreiben
[C#] Textdatei in Arraylist speichern
[C#] SHA-1 Hash einer Datei erzeugen
[VB.NET] Datei Paketweise Kopieren
[ASP.net] Datei nach Bildupload prüfen
[C#] Dateien suchen mit LINQ
[C#] Datei/Ordner durch Erweiterungsmethoden abfragen
[C#] CSV Dateien schreiben
[C#] Create Nice File Size in C#
[VB.NET] Programmpfad mittels Erweiterung ermitteln in VB
[VB.NET] Dateien nach Datum sortieren
[C#] CSV und XML-Datei Datenbank-Import (incl. valid-check)
[VB.NET] wie in der CMD Pfad zu Datei ermitteln anhand des EXE-namens
[VB.NET] Dateigröße als formatierter String
[VB.NET] Alle Dateien eines Ordners auflisten
[VB.NET] Den kurzen Pfad einer Datei ermitteln (8.3 Format)
[C#] Erzeugen eines zufälligen Strings
[VB.NET] Dummy Datei erstellen
[C#] Datei in Papierkorb verschieben
[C#] Zeilen einer Datei zählen
[C#] Schreibschutz einer Datei setzen / entfernen
[ASP.net] Eine Datei zum Download anbieten
[VB.NET] Prüfen ob Dateiattribut vorhanden ist
[VB.NET] Bestimmtes Dateiattribut entfernen
[VB.NET] Datei ein bestimmtes Attribut geben
[VB.NET] Prüfen ob Datei eine EXE Datei ist
[C#] Alle Dateien eines Ordners auflisten - C# Version -
[VB.NET] Datei-Inhalt anzeigen
[C#] Stream in Datei umleiten
[C#] Ordnergröße ermitteln
[C#] Automatisches Umbenennen eines Pfades
[C#] Kapazität mit Einheit darstellen
[C#] MIMETypeManager
[C#] externes Programm aufrufen (andere Version) mit Parameter
[C#] Datei ein bestimmtes Attribut geben/setzen
[C#] Datei einlesen und als ArrayList jede Zeile zurückliefern
[C#] Parallele Dateisuche über mehrere Laufwerke
[C#] Byte Größenangaben als String formatieren (KB, MB, GB, ...)
[C#] Textdatei einlesen auf verschiedene Arten
[C#] Datei Teilweise einlesen (gestückelt)
[C#] Bestimmte Zeile einer Datei löschen
[C#] Ist Datei beschreibbar
[C#] Sichern einer MS-SQLServer Datenbank aus C#
[C#] Datei mi GZip packen
[C#] ini Datei anlegen - mit Dictionary
[C#] Dummy Files erzeugen. ( Mit Inhalt )
[C#] Byte-Array in Struktur kopieren
[C#] Text in Textdateien suchen
[VB.NET] Prüfen, ob eine Datei überschrieben werden kann
[C#] Verzeichnis überwachen mit dem FileSystemWatcher
[C#] Das Verzeichnis der Anwendung ermitteln
[C#] Programmverzeichnis finden (z.B. c:\Programme)
[VB.NET] Assembly Verzeichnis
[C#] Assembly Verzeichnis
[VB.NET] Assembly Verzeichnis 2
[C#] Windows Temp Verzeichnis ermitteln
[C#] Ordner mit Inhalt kopieren (rekursiv)
[C#] rekursiver Verzeichnislauf
[C#] Eigenschaften aller Steuerlemente eines Formulars setzen
[C#] Treeview rekursiv durchsuchen
[VB.NET] Ordergröße rekursiv bestimmen
[C#] Ordner und Dateien rekursiv durchlaufen
[C#] FTP - Ordner Rekursiv erstellen
[VB.NET] Größter gemeinsamer Teiler
[VB.NET] Fibonacci-Folge iterativ erzeugen
[VB.NET] Binomialkoeffizient
[C#] Dateien mit bestimmter Extension rekursiv in Array einlesen
[C#] Erzeugen von Zeichenfolgen durch Permutation
[C#] Verhindern das Funktion rekursiv aufgerufen wird.
[VB.NET] Größter gemeinsamer Teiler (2)
[C#] C# Ordner auslesen und in Liste speichern "rekursiv"
[VB.NET] Doppelte Einträge aus Arraylist löschen
[C#] alle Textboxen in einer Form löschen
[C#] alle Dateien vom gleichen Typ löschen
[VB.NET] Einen Eintrag aus der Registy löschen
[VB.NET] Registryschlüssel löschen
[C#] Console löschen
[VB.NET] Ausgewählte Items in einer ListBox löschen
[C#] Löschen aller TextControls auf einer Form in C#
[C#] Papierkorb leeren

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.