2016-08-02 2 views
1

Мне нужно удалить все файлы в локальном пути моего программного обеспечения, кроме моего программного обеспеченияудалить все файлы в локальном пути

моего сценария:

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

ошибка:

Необработанного исключения тип «System.UnauthorizedAccessException» произошел в mscorlib.dll

Дополнительная информация: L'accès au chemin d'accès 'D: \ FWeb \ AutoUpdate \ AutoUpdate \ bin \ Debug \ AutoUpdate.exe' est refusé.

+0

Вы пытаетесь удалить файл, который работает ... –

+1

Есть много «удалить собственные исполняемые» вопросы https://www.bing.com/search?q=c%23+delete+own + exe - который, я уверен, вы уже прочитали ... Но почему-то эта информация о том, что вы пробовали, не попала в сообщение .... –

ответ

0

Вам просто нужно отфильтровать свою сборку. Конечно, вы не можете удалить бинарный файл, который в данный момент работает, так исключить его из списка:

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); 

Чтобы избежать проблем индивидуальной чувствительности вы можете рассмотреть

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

вместо этого.

2

Вы пытаетесь удалить файл, который используется - скорее всего, исполняемый файл текущего процесса. Вы можете пропустить этот конкретный файл, но имейте в виду, что если он загружает любые библиотеки (DLL-файлы), они также могут быть заблокированы. Другие файлы также могут использоваться (например, файлы .pdb, ресурсы и т. Д.), Поэтому убедитесь, что вы исключили все это.

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); 
Смежные вопросы