Was wäre schön, wenn DirectoryInfo eine Methode wie .Clean () hätte;
JL.
6
oder .DeleteFolders- und DeleteFiles-Methoden.
JL.
18
Sie möchten wissen, dass Ihre Löschvorgänge sehr leicht eine Ausnahme auslösen können, wenn eine Datei gesperrt ist (oder wenn Sie keine Rechte haben). Eine Liste der Ausnahmen finden Sie in FileInfo.Delete.
Shane Courtrille
Antworten:
831
System.IO.DirectoryInfo di =newDirectoryInfo("YourPath");foreach(FileInfo file in di.GetFiles()){
file.Delete();}foreach(DirectoryInfo dir in di.GetDirectories()){
dir.Delete(true);}
Wenn Ihr Verzeichnis möglicherweise viele Dateien enthält, EnumerateFiles()ist dies effizienter als GetFiles(), da Sie bei Verwendung EnumerateFiles()mit der Aufzählung beginnen können, bevor die gesamte Sammlung zurückgegeben wird, GetFiles()anstatt die gesamte Sammlung in den Speicher zu laden, bevor Sie mit der Aufzählung beginnen. Sehen Sie dieses Zitat hier :
Wenn Sie mit vielen Dateien und Verzeichnissen arbeiten, kann EnumerateFiles () daher effizienter sein.
Gleiches gilt für EnumerateDirectories()und GetDirectories(). Der Code wäre also:
foreach(FileInfo file in di.EnumerateFiles()){
file.Delete();}foreach(DirectoryInfo dir in di.EnumerateDirectories()){
dir.Delete(true);}
Für die Zwecke dieser Frage gibt es wirklich keinen Grund, GetFiles()und zu verwenden GetDirectories().
Was ist mit stackoverflow.com/questions/12415105/…? "Wenn Sie Directory.Delete aufrufen und eine Datei auf diese Weise geöffnet ist, kann Directory.Delete alle Dateien erfolgreich löschen. Wenn Directory.Delete RemoveDirectory aufruft, ist ein" Verzeichnis nicht leer ". Ausnahme wird ausgelöst, weil eine Datei zum Löschen markiert, aber nicht tatsächlich gelöscht ist. "
Kiquenet
74
DirectoryInfo ist langsam, da dadurch viel mehr andere Daten erfasst werden. Übrigens: Directory.Delete(path, true)wird sich um alles kümmern :)
AcidJunkie
57
@AcidJunkie, Dadurch wird auch das betreffende Verzeichnis entfernt, während das OP speziell die Beibehaltung des Stammverzeichnisses anfordert.
Marc L.
5
Beachten Sie, dass dies nicht funktioniert, wenn eine der Dateien schreibgeschützt ist. Sie müssen das schreibgeschützte Flag entfernen, bevor Sie anrufen file.Delete().
Ben
8
Dies scheint nicht zu funktionieren, wenn Unterverzeichnisse Dateien enthalten.
Cdiggins
174
Ja, das ist der richtige Weg. Wenn Sie sich eine "Clean" -Funktion (oder, wie ich es lieber nennen möchte, "Empty" -Funktion) geben möchten, können Sie eine Erweiterungsmethode erstellen.
publicstaticvoidEmpty(thisSystem.IO.DirectoryInfo directory){foreach(System.IO.FileInfo file in directory.GetFiles()) file.Delete();foreach(System.IO.DirectoryInfo subDirectory in directory.GetDirectories()) subDirectory.Delete(true);}
Die letzte Zeile sollte subDirectory.Delete (true) anstelle von directory.Delete (true) sein. Ich habe gerade den Code ausgeschnitten und eingefügt und er hat das Hauptverzeichnis selbst gelöscht. Danke für den Code, es ist großartig!
Aximili
26
Beachten Sie, dass bereits Emptyin C # vorhanden ist, z string. Wenn ich etwas anderes mit dem Namen sehen Emptywürde, wäre ich überrascht, wenn es das Objekt (oder das Dateisystem) modifizieren würde, anstatt mir ein zu geben bool, das besagt, ob es leer ist oder nicht. Aus diesem Grund würde ich mit dem Namen gehen Clean.
Standard
5
@Default: Ich denke nicht, dass die Tatsache, dass ein Typ bereits eine Eigenschaft hat, einen Einfluss darauf haben sollte, ob ein anderer (völlig unabhängiger) Typ diese haben sollte. und die Konvention für Eigenschaften und Funktionen, die den Zustand von Wörtern angeben, die auch Verben sein können, besteht darin, ihnen Is(dh IsEmptynicht Empty) ein Präfix voranzustellen .
Adam Robinson
3
@ AdamRobinson Ich wollte es nur notieren. Für mich hat das , was Microsoft in seinem Code hat, eine gewisse Bedeutung. Aber es ist für jeden zu interpretieren :)
Standard
4
@simonhaines: Der Punkt der Frage war, das Verzeichnis zu leeren (dh alles darin zu löschen), nicht das Verzeichnis selbst zu löschen.
Adam Robinson
77
Der folgende Code löscht den Ordner rekursiv:
privatevoid clearFolder(stringFolderName){DirectoryInfo dir =newDirectoryInfo(FolderName);foreach(FileInfo fi in dir.GetFiles()){
fi.Delete();}foreach(DirectoryInfo di in dir.GetDirectories()){
clearFolder(di.FullName);
di.Delete();}}
Die zweite Option, Directory.Delete (String, Boolean), hat bei mir funktioniert.
Stephen MacDougall
15
Dadurch wird das Stammverzeichnis gelöscht, in dem das OP ausdrücklich darum gebeten hat, dass es beibehalten wird.
Marc L.
2
Deletewird geworfen, wenn das Verzeichnis nicht existiert, daher wäre es sicherer, zuerst eine Directory.ExistsÜberprüfung durchzuführen.
James
1
@ James Directory.Existsist nicht genug; Nach der Überprüfung hat möglicherweise ein anderer Thread das Verzeichnis umbenannt oder entfernt. Es ist sicherer zu try-catch.
andre_ss6
2
@ Marv Vorsicht beim einfachen Hinzufügen eines, Directory.Createda die Rekursion Directory.Deleteleider nicht garantiert synchron ist ..
using System.IO;
using System.Linq;…var directory =Directory.GetParent(TestContext.TestDir);
directory.EnumerateFiles().ToList().ForEach(f => f.Delete());
directory.EnumerateDirectories().ToList().ForEach(d => d.Delete(true));
Beachten Sie, dass meine Lösung hier nicht performant ist, da ich sie verwende Get*().ToList().ForEach(...), die dieselbe IEnumerablezweimal generiert . Ich verwende eine Erweiterungsmethode, um dieses Problem zu vermeiden:
using System.IO;
using System.Linq;…var directory =Directory.GetParent(TestContext.TestDir);
directory.EnumerateFiles().ForEachInEnumerable(f => f.Delete());
directory.EnumerateDirectories().ForEachInEnumerable(d => d.Delete(true));
Dies ist die Erweiterungsmethode:
/// <summary>/// Extensions for <see cref="System.Collections.Generic.IEnumerable"/>./// </summary>publicstaticclassIEnumerableOfTExtensions{/// <summary>/// Performs the <see cref="System.Action"/>/// on each item in the enumerable object./// </summary>/// <typeparam name="TEnumerable">The type of the enumerable.</typeparam>/// <param name="enumerable">The enumerable.</param>/// <param name="action">The action.</param>/// <remarks>/// “I am philosophically opposed to providing such a method, for two reasons./// …The first reason is that doing so violates the functional programming principles/// that all the other sequence operators are based upon. Clearly the sole purpose of a call/// to this method is to cause side effects.”/// —Eric Lippert, “foreach” vs “ForEach” [http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx]/// </remarks>publicstaticvoidForEachInEnumerable<TEnumerable>(thisIEnumerable<TEnumerable> enumerable,Action<TEnumerable> action){foreach(var item in enumerable){
action(item);}}}
Und wenn Sie auch versuchen, Unterverzeichnisse zu löschen, kann dies foreach (var dir in info.GetDirectories("*", SearchOption.AllDirectories).OrderByDescending(dir => dir.FullName.Length)) dir.Delete();hilfreich sein.
Warty
1
Wenn Sie Leistung mögen, sollten Sie directory.EnumerateFiles()und directory.EnumerateDirectories()anstelle der directory.Get*()Methoden verwenden.
Tinister
1
Komisch, meine eigene IEnumerable<T>.ForEach()Erweiterung hat einen zusammenfassenden XML-Kommentar: "Verletzung! Verletzung! Unrein!".
Marc L.
Hey, was ist der 2. Grund? Der 3.? Usw.?
Bill Roberts
lol @RASX - er spricht mit Ihnen: "Wenn Sie diesen philosophischen Einwänden nicht zustimmen und in diesem Muster einen praktischen Wert finden, schreiben Sie diesen trivialen Einzeiler auf jeden Fall selbst."
Beachten Sie, dass dadurch alle Sonderberechtigungen für den Pfad entfernt werden
Matthew Lock
6
Sie müssen eine Zeitüberschreitung zwischen diesen beiden Aktionen hinzufügen. Wenn Sie versuchen, diesen Code auszuführen, wird eine Ausnahme angezeigt: while (true) {Directory.Delete (@ "C: \ Myfolder", true); Directory.CreateDirectory (@ "C: \ Myfolder"); }
RcMan
31
privatevoidClearFolder(stringFolderName){DirectoryInfo dir =newDirectoryInfo(FolderName);foreach(FileInfo fi in dir.GetFiles()){try{
fi.Delete();}catch(Exception){}// Ignore all exceptions}foreach(DirectoryInfo di in dir.GetDirectories()){ClearFolder(di.FullName);try{
di.Delete();}catch(Exception){}// Ignore all exceptions}}
Wenn Sie wissen, dass es keine Unterordner gibt, ist so etwas möglicherweise am einfachsten:
Ich habe diese Funktion verwendet, um den temporären Systemordner zu löschen. Ich habe gerade try-catch um Delete () und IsReadOnly hinzugefügt, um alle Ausnahmen zu ignorieren, und es hat funktioniert.
Humbads
@humbads, können Sie diese Antwort aktualisieren oder den Code hier einfügen, und ich werde mit Ihren Änderungen aktualisieren?
Wie oben: Beachten Sie, dass dadurch alle Sonderberechtigungen für den Pfad entfernt werden.
hB0
8
Bei jeder Methode, die ich ausprobiert habe, sind sie irgendwann mit System.IO-Fehlern fehlgeschlagen. Die folgende Methode funktioniert mit Sicherheit, auch wenn der Ordner leer ist oder nicht, schreibgeschützt oder nicht usw.
Ich bevorzuge immer rd / s / q + mkdir, wenn es darum geht, Verzeichnisse zu leeren.
Dawid Ohia
7
Dies ist keine plattformübergreifende Lösung. Unix-ähnliche Systeme haben eindeutig keine cmd.exe, sie führen nicht einmal EXE-Dateien aus. C # ist nicht nur Windows, sondern auch Mono, das plattformübergreifend ist.
Anzeigename
1
@SargeBorsch Es gab keine plattformübergreifende Anforderung in der Frage und da C # ist, wird die Lösung höchstwahrscheinlich für Windows verwendet. Es scheint die einzige Antwort zu sein, die keine .NET-Funktionen verwendet, daher ist es als Alternative ziemlich wertvoll.
Alex Pandrea
7
Hier ist das Tool, mit dem ich nach dem Lesen aller Beiträge geendet habe. Es tut
Löscht alles, was gelöscht werden kann
Gibt false zurück, wenn einige Dateien im Ordner verbleiben
Es behandelt
Schreibgeschützte Dateien
Löschverzögerung
Gesperrte Dateien
Directory.Delete wird nicht verwendet, da der Prozess ausnahmsweise abgebrochen wird.
/// <summary>/// Attempt to empty the folder. Return false if it fails (locked files...)./// </summary>/// <param name="pathName"></param>/// <returns>true on success</returns>publicstaticboolEmptyFolder(string pathName){bool errors =false;DirectoryInfo dir =newDirectoryInfo(pathName);foreach(FileInfo fi in dir.EnumerateFiles()){try{
fi.IsReadOnly=false;
fi.Delete();//Wait for the item to disapear (avoid 'dir not empty' error).while(fi.Exists){System.Threading.Thread.Sleep(10);
fi.Refresh();}}catch(IOException e){Debug.WriteLine(e.Message);
errors =true;}}foreach(DirectoryInfo di in dir.EnumerateDirectories()){try{EmptyFolder(di.FullName);
di.Delete();//Wait for the item to disapear (avoid 'dir not empty' error).while(di.Exists){System.Threading.Thread.Sleep(10);
di.Refresh();}}catch(IOException e){Debug.WriteLine(e.Message);
errors =true;}}return!errors;}
Der folgende Code bereinigt das Verzeichnis, lässt jedoch das Stammverzeichnis dort (rekursiv).
Action<string>DelPath=null;DelPath= p =>{Directory.EnumerateFiles(p).ToList().ForEach(File.Delete);Directory.EnumerateDirectories(p).ToList().ForEach(DelPath);Directory.EnumerateDirectories(p).ToList().ForEach(Directory.Delete);};DelPath(path);
Die Verwendung nur statischer Methoden mit Datei und Verzeichnis anstelle von DateiInfo und VerzeichnisInfo ist schneller. (Siehe akzeptierte Antwort unter Was ist der Unterschied zwischen File und FileInfo in C #? ). Antwort als Dienstprogrammmethode angezeigt.
privatevoidClearFolder(stringFolderName){DirectoryInfo dir =newDirectoryInfo(FolderName);foreach(FileInfo fi in dir.GetFiles()){
fi.IsReadOnly=false;
fi.Delete();}foreach(DirectoryInfo di in dir.GetDirectories()){ClearFolder(di.FullName);
di.Delete();}}
Eine Ausnahme vom Typ 'System.IO.IOException' ist in mscorlib.dll aufgetreten, wurde jedoch im Benutzercode nicht behandelt. Zusätzliche Informationen: Das Verzeichnis ist nicht leer.
Kipusoep
3
Wenn Sie es in Windows 7 gerade manuell mit Windows Explorer erstellt haben, ähnelt die Verzeichnisstruktur der folgenden:
C:
\AAA
\BBB
\CCC
\DDD
Führen Sie den in der ursprünglichen Frage vorgeschlagenen Code aus, um das Verzeichnis C: \ AAA, die Zeile, zu bereinigen di.Delete(true)Wenn Sie schlägt beim Versuch, BBB zu löschen immer mit der IOException "Das Verzeichnis ist nicht leer" fehl. Dies liegt wahrscheinlich an Verzögerungen / Caching im Windows Explorer.
Der folgende Code funktioniert für mich zuverlässig:
staticvoidMain(string[] args){DirectoryInfo di =newDirectoryInfo(@"c:\aaa");CleanDirectory(di);}privatestaticvoidCleanDirectory(DirectoryInfo di){if(di ==null)return;foreach(FileSystemInfo fsEntry in di.GetFileSystemInfos()){CleanDirectory(fsEntry asDirectoryInfo);
fsEntry.Delete();}WaitForDirectoryToBecomeEmpty(di);}privatestaticvoidWaitForDirectoryToBecomeEmpty(DirectoryInfo di){for(int i =0; i <5; i++){if(di.GetFileSystemInfos().Length==0)return;Console.WriteLine(di.FullName+ i);Thread.Sleep(50* i);}}
Was ist mit stackoverflow.com/questions/12415105/…? "Wenn Sie Directory.Delete aufrufen und eine Datei auf diese Weise geöffnet ist, kann Directory.Delete alle Dateien erfolgreich löschen. Wenn Directory.Delete RemoveDirectory aufruft, ist ein" Verzeichnis nicht leer ". Ausnahme wird ausgelöst, weil eine Datei zum Löschen markiert, aber nicht tatsächlich gelöscht ist. "
Kiquenet
@Kiquenet: Anscheinend haben wir ein Problem in Windows gefunden. Windows hätte die Liste der zum Löschen markierten Dateien konsultieren können. Wenn alle Dateien im Verzeichnis zum Löschen markiert sind, sagen Sie nicht, dass das Verzeichnis nicht leer ist. Auf jeden Fall ist mein WaitForDirectoryToBecomeEmpty () eine Problemumgehung.
Farfareast
2
Diese Version verwendet keine rekursiven Aufrufe und löst das schreibgeschützte Problem.
publicstaticvoidEmptyDirectory(string directory){// First delete all the files, making sure they are not readonlyvar stackA =newStack<DirectoryInfo>();
stackA.Push(newDirectoryInfo(directory));var stackB =newStack<DirectoryInfo>();while(stackA.Any()){var dir = stackA.Pop();foreach(var file in dir.GetFiles()){
file.IsReadOnly=false;
file.Delete();}foreach(var subDir in dir.GetDirectories()){
stackA.Push(subDir);
stackB.Push(subDir);}}// Then delete the sub directories depth firstwhile(stackB.Any()){
stackB.Pop().Delete();}}
Das folgende Beispiel zeigt, wie Sie das tun können. Es erstellt zuerst einige Verzeichnisse und eine Datei und entfernt sie dann über Directory.Delete(topPath, true);:
Es ist nicht der beste Weg, um mit dem oben genannten Problem umzugehen. Aber es ist eine Alternative ...
while(Directory.GetDirectories(dirpath).Length>0){//Delete all files in directorywhile(Directory.GetFiles(Directory.GetDirectories(dirpath)[0]).Length>0){File.Delete(Directory.GetFiles(dirpath)[0]);}Directory.Delete(Directory.GetDirectories(dirpath)[0]);}
Könnten Sie genauer sein und erklären, wie und warum dies funktionieren sollte?
Tiefgefroren
3
Antworten mit nur Code sind nicht geeignet. Sie sollten erklären, wie und warum es funktionieren / das Problem lösen sollte.
Rdurand
0
Dies zeigt, wie wir den Ordner löschen und überprüfen, ob wir das Textfeld verwenden
using System.IO;
namespace delete_the_folder
{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidDeletebt_Click(object sender,EventArgs e){//the first you should write the folder placeif(Pathfolder.Text==""){MessageBox.Show("ples write the path of the folder");Pathfolder.Select();//return;}FileAttributes attr =File.GetAttributes(@Pathfolder.Text);if(attr.HasFlag(FileAttributes.Directory))MessageBox.Show("Its a directory");elseMessageBox.Show("Its a file");string path =Pathfolder.Text;FileInfo myfileinf =newFileInfo(path);
myfileinf.Delete();}}}
publicstaticvoidDeleteDirectory(string path){if(Directory.Exists(path)){//Delete all files from the Directoryforeach(string file inDirectory.GetFiles(path)){File.Delete(file);}//Delete all child Directoriesforeach(string directory inDirectory.GetDirectories(path)){DeleteDirectory(directory);}//Delete a DirectoryDirectory.Delete(path);}}
Um den Ordner zu löschen, ist dies Code mithilfe eines Textfelds und einer Schaltfläche using System.IO;:
privatevoidDeletebt_Click(object sender,EventArgs e){System.IO.DirectoryInfo myDirInfo =newDirectoryInfo(@""+delete.Text);foreach(FileInfo file in myDirInfo.GetFiles()){
file.Delete();}foreach(DirectoryInfo dir in myDirInfo.GetDirectories()){
dir.Delete(true);}}
Siehe unten ... "Löschen und Neuerstellen" ist nicht dasselbe wie Beibehalten, alle ACL-Anpassungen gehen verloren.
Marc L.
Ich habe etwas sehr Ähnliches versucht, da ich mich nicht um ACL-Anpassungen gekümmert habe und auf Probleme mit dem Ordner gestoßen bin, der nachDirectory.CreateDirectory
JG in SD
-3
Das einzige , was Sie tun sollten , ist gesetzt optional recursive parameterzu True.
Antworten:
Wenn Ihr Verzeichnis möglicherweise viele Dateien enthält,
EnumerateFiles()
ist dies effizienter alsGetFiles()
, da Sie bei VerwendungEnumerateFiles()
mit der Aufzählung beginnen können, bevor die gesamte Sammlung zurückgegeben wird,GetFiles()
anstatt die gesamte Sammlung in den Speicher zu laden, bevor Sie mit der Aufzählung beginnen. Sehen Sie dieses Zitat hier :Gleiches gilt für
EnumerateDirectories()
undGetDirectories()
. Der Code wäre also:Für die Zwecke dieser Frage gibt es wirklich keinen Grund,
GetFiles()
und zu verwendenGetDirectories()
.quelle
Directory.Delete(path, true)
wird sich um alles kümmern :)file.Delete()
.Ja, das ist der richtige Weg. Wenn Sie sich eine "Clean" -Funktion (oder, wie ich es lieber nennen möchte, "Empty" -Funktion) geben möchten, können Sie eine Erweiterungsmethode erstellen.
Auf diese Weise können Sie so etwas wie ... tun.
quelle
Empty
in C # vorhanden ist, zstring
. Wenn ich etwas anderes mit dem Namen sehenEmpty
würde, wäre ich überrascht, wenn es das Objekt (oder das Dateisystem) modifizieren würde, anstatt mir ein zu gebenbool
, das besagt, ob es leer ist oder nicht. Aus diesem Grund würde ich mit dem Namen gehenClean
.Is
(dhIsEmpty
nichtEmpty
) ein Präfix voranzustellen .Der folgende Code löscht den Ordner rekursiv:
quelle
quelle
Delete
wird geworfen, wenn das Verzeichnis nicht existiert, daher wäre es sicherer, zuerst eineDirectory.Exists
Überprüfung durchzuführen.Directory.Exists
ist nicht genug; Nach der Überprüfung hat möglicherweise ein anderer Thread das Verzeichnis umbenannt oder entfernt. Es ist sicherer zutry-catch
.Directory.Create
da die RekursionDirectory.Delete
leider nicht garantiert synchron ist ..Wir können auch Liebe für LINQ zeigen :
Beachten Sie, dass meine Lösung hier nicht performant ist, da ich sie verwende
Get*().ToList().ForEach(...)
, die dieselbeIEnumerable
zweimal generiert . Ich verwende eine Erweiterungsmethode, um dieses Problem zu vermeiden:Dies ist die Erweiterungsmethode:
quelle
foreach (var dir in info.GetDirectories("*", SearchOption.AllDirectories).OrderByDescending(dir => dir.FullName.Length)) dir.Delete();
hilfreich sein.directory.EnumerateFiles()
unddirectory.EnumerateDirectories()
anstelle derdirectory.Get*()
Methoden verwenden.IEnumerable<T>.ForEach()
Erweiterung hat einen zusammenfassenden XML-Kommentar: "Verletzung! Verletzung! Unrein!".Der einfachste Weg:
Beachten Sie, dass dadurch möglicherweise einige Berechtigungen für den Ordner gelöscht werden.
quelle
Wenn Sie wissen, dass es keine Unterordner gibt, ist so etwas möglicherweise am einfachsten:
quelle
quelle
Bei jeder Methode, die ich ausprobiert habe, sind sie irgendwann mit System.IO-Fehlern fehlgeschlagen. Die folgende Methode funktioniert mit Sicherheit, auch wenn der Ordner leer ist oder nicht, schreibgeschützt oder nicht usw.
quelle
Hier ist das Tool, mit dem ich nach dem Lesen aller Beiträge geendet habe. Es tut
Es behandelt
Directory.Delete wird nicht verwendet, da der Prozess ausnahmsweise abgebrochen wird.
quelle
Der folgende Code bereinigt das Verzeichnis, lässt jedoch das Stammverzeichnis dort (rekursiv).
quelle
ich benutzte
Zum Löschen des alten Bildes brauche ich kein Objekt in diesem Ordner
quelle
Die Verwendung nur statischer Methoden mit Datei und Verzeichnis anstelle von DateiInfo und VerzeichnisInfo ist schneller. (Siehe akzeptierte Antwort unter Was ist der Unterschied zwischen File und FileInfo in C #? ). Antwort als Dienstprogrammmethode angezeigt.
quelle
quelle
quelle
Wenn Sie es in Windows 7 gerade manuell mit Windows Explorer erstellt haben, ähnelt die Verzeichnisstruktur der folgenden:
Führen Sie den in der ursprünglichen Frage vorgeschlagenen Code aus, um das Verzeichnis C: \ AAA, die Zeile, zu bereinigen
di.Delete(true)
Wenn Sie schlägt beim Versuch, BBB zu löschen immer mit der IOException "Das Verzeichnis ist nicht leer" fehl. Dies liegt wahrscheinlich an Verzögerungen / Caching im Windows Explorer.Der folgende Code funktioniert für mich zuverlässig:
quelle
Diese Version verwendet keine rekursiven Aufrufe und löst das schreibgeschützte Problem.
quelle
Verwenden Sie die GetDirectories-Methode von DirectoryInfo.
quelle
Das folgende Beispiel zeigt, wie Sie das tun können. Es erstellt zuerst einige Verzeichnisse und eine Datei und entfernt sie dann über
Directory.Delete(topPath, true);
:Es stammt von https://msdn.microsoft.com/en-us/library/fxeahc5f(v=vs.110).aspx .
quelle
Es ist nicht der beste Weg, um mit dem oben genannten Problem umzugehen. Aber es ist eine Alternative ...
quelle
quelle
Dies zeigt, wie wir den Ordner löschen und überprüfen, ob wir das Textfeld verwenden
quelle
quelle
Anruf von der Hauptleitung
Fügen Sie diese Methode hinzu
quelle
quelle
Um den Ordner zu löschen, ist dies Code mithilfe eines Textfelds und einer Schaltfläche
using System.IO;
:quelle
quelle
Directory.CreateDirectory
Das einzige , was Sie tun sollten , ist gesetzt
optional recursive parameter
zuTrue
.Directory.Delete("C:\MyDummyDirectory", True)
Dank .NET. :) :)
quelle
Mehr brauchst du nicht
quelle