2016-04-04 11 views
-1

Nun, was ich tun möchte, ist, meinen Ordner zu entfernen, der sich innerhalb von Roaming befindet. Ich möchte, dass dies für jeden Benutzer funktioniert, daher ist der Benutzername jedes PCs anders. Ich weiß schon, dass Weg von AppData zu bekommen mir folgenden Voraussetzungen:Entfernen eines Verzeichnisses mit Dateien in AppData

var path = Environment.SpecialFolder.ApplicationData; 

Aber was zu tun, um den Ordner mit einem bestimmten Namen zu entfernen (lassen Sie sie es ExampleDir nennen)? Ich habe das versucht:

Path.Combine(path + "Kappa"); 
Directory.Delete(true.ToString()); 

Aber das funktioniert nicht. Ich bin Anfänger bei C#, trotzdem möchte ich üben. Wird dankbar sein für Hilfe =)

+0

Haben Sie also gefunden, was Sie gesucht haben, oder ...? –

Antwort

0
  • Zunächst einmal verwenden Sie Path.Combine() falsch. Aber das brauchst du überhaupt nicht.
  • Zweitens müssen Sie Backslases verwenden, um Ordner in einem Pfad zu trennen, wenn sie mit + kombiniert werden.
  • Und drittens: Die Methode Directory.Delete() möchte den Pfad des Ordners, den Sie als Argument löschen möchten.

Try this:

Directory.Delete(Environment.SpecialFolder.ApplicationData + "\\Kappa"); 
+0

'Path.Combine()' ist ** WAY ** besser als normale Stringverkettung zu verwenden! Es ist also keine "Sie brauchen das überhaupt nicht" -Ding. –

+0

OK, das war mir nicht bewusst. – RomCoo

+0

Außerdem ist 'Environment.SpecialFolder.ApplicationData' nur eine Aufzählung, eine Zahl. Sie müssen 'Environment.GetFolderPath()' verwenden, um den Pfad des AppData-Ordners abzurufen. :) –

1

Zu allererst wird Path.Combine() verwendet String-Verkettung zu ersetzen, so verketten keine Saiten in ihm. Übergeben Sie jeden Namen, den Sie verketten möchten, als Parameter, und die Funktion erledigt den Rest.

Zweitens, um einen Ordner mit Dateien zu entfernen, müssen Sie die Directory.Delete(string, bool) Überladung verwenden. Der Wert bool (recursive) gibt an, ob Sie Dateien und Unterordner im angegebenen Verzeichnis (siehe MSDN Documentation for Directory.Delete()) entfernen möchten.

Und schließlich Environment.SpecialFolder.ApplicationData ist nur eine Aufzählung (was bedeutet, es ist nur eine Nummer). Sie müssen es als Parameter an die Environment.GetFolderPath()-Methode übergeben, um den tatsächlichen Pfad des AppData-Ordners abzurufen.

Beispiel:

string AppDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
string FolderToDelete = Path.Combine(AppDataFolder, "Kappa"); 

try 
{ 
    Directory.Delete(FolderToDelete, true); //Setting "recursive" to true will remove every subfile/-folder. 
} 
catch (Exception ex) 
{ 
    //An error occurred, use this block to log it/show it to the user/whatever. 
    //ex.Message - The error message. 
    //ex.StackTrace - Where in the code the error occurred. 
} 

EDIT:

Als @ dman2306 in seinem Kommentar sagte, einige Ausnahmebehandlung ist eine gute Praxis bei, dass das Löschen fehlschlägt. Ich habe dies zu meinem obigen Code hinzugefügt. Der Code im Block try wird ausgeführt, bis eine Ausnahme ausgelöst wird (falls vorhanden). Wenn eine Ausnahme die Ausführung ausgelöst wird, wird den catch Block weitergehen, das ist, wo Sie die Ausnahme abfangen und zum Beispiel der Fehlerprotokollierung durchführen, andere Verfahren zu stoppen usw.

EDIT 2:

Sie möglicherweise müssen "Roaming" zu Path.Combine() hinzufügen. Ich bin mir nicht sicher, ob es bereits enthalten ist oder nicht, und ich kann das jetzt nicht testen.

string FolderToDelete = Path.Combine(AppDataFolder, "Roaming", "Kappa"); 

Vergessen Sie, was ich sagte, SpecialFolder.ApplicationData Sie den Pfad zu dem Ordner Roaming gibt.

+0

Das OP sollte wahrscheinlich einen try/catch für 'Directory.Delete' enthalten, da es in Situationen fehlschlägt, in denen das Verzeichnis nicht existiert, eine schreibgeschützte Datei existiert, Dateien verwendet werden usw. – dman2306

+0

@ dman2306: True, werde hinzufügen. –

+0

@ dman2306: Auch ein gründlicheres Beispiel, warum 'Path.Combine()' ist besser: http://Stackoverflow.com/a/17098724/3740093 –

Verwandte Themen