2016-08-02 21 views
1

Ich brauche alle Dateien im lokalen Pfad meiner Software, außer meine Softwarealle Dateien im lokalen Pfad löschen

mein Skript zu löschen:

string a = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
Array.ForEach(Directory.GetFiles(a), File.Delete); 

Fehler:

Eine nicht behandelte Ausnahme von Typ 'System.UnauthorizedAccessException' aufgetreten in mscorlib.dll

Zusätzliche Informationen: 'D: \ FWeb \ AutoUpdate \ AutoUpdate \ bin \ Debug \ AutoUpdate.exe' ist est refusé.

+0

Sie versuchen, die Datei zu löschen, die ausgeführt ist ... –

+1

Es gibt viele Fragen „eigene ausführbare Datei löschen“ https://www.bing.com/search?q=c%23+delete+own + exe - was du sicher schon gelesen hast ... Aber irgendwie ist diese Information über das, was du versucht hast, nicht in den Post geraten ... –

Antwort

0

Sie müssen nur Ihre eigene Baugruppe herausfiltern. Sie betrachten können

string[] files = Directory.GetFiles(a) 
          .Where(f => !f.Equals(location, StringComparison.OrdinalIgnoreCase)) 
          .ToArray(); 

statt

string location = Assembly.GetEntryAssembly().Location; 
string a = System.IO.Path.GetDirectoryName(location); 
string[] files = Directory.GetFiles(a).Where(f => f != location).ToArray(); 
Array.ForEach(files, File.Delete); 

Fall-Empfindlichkeit Probleme zu vermeiden: Natürlich können Sie die binäre nicht löschen, die gerade ausgeführt wird, so dass es aus der Liste ausgeschlossen werden.

2

Sie versuchen, eine Datei zu löschen, die gerade verwendet wird - höchstwahrscheinlich die ausführbare Datei des aktuellen Prozesses. Sie können diese spezifische Datei entweder überspringen, aber beachten Sie, dass sie beim Laden von Bibliotheken (.dll-Dateien) ebenfalls gesperrt werden können. Andere Dateien werden möglicherweise ebenfalls verwendet (z. B. .pdb-Dateien, Ressourcen usw.). Stellen Sie daher sicher, dass Sie alles so ausschließen.

var assemblyPath = Assembly.GetEntryAssembly().Location; 
var pathsToExclude = new[] { assemblyPath }; 
string a = System.IO.Path.GetDirectoryName(assemblyPath); 
foreach (var file in Directory.EnumerateFiles(a).Except(pathsToExclude)) 
    File.Delete(file);