Удалить все в каталоге, кроме файла в C # - PullRequest
6 голосов
/ 02 апреля 2011

У меня проблемы с удалением всего в каталоге, кроме файла (index.dat). Я пытаюсь очистить папку cookie и временную папку файлов, но я получаю сообщение об ошибке при попытке удалить index.dat, поскольку ониспользуется другим процессом.Есть ли способ удалить все в папке temp и cookies , кроме файла index.dat?Вот мой код:

string userProfile = Environment.GetEnvironmentVariable("USERPROFILE");
string strDirLocalq = Path.Combine(userProfile, "AppData");
string strDirLocalw = Path.Combine(strDirLocalq, "Roaming");
string strDirLocale = Path.Combine(strDirLocalw, "Microsoft");
string strDirLocalr = Path.Combine(strDirLocale, "Windows");
string strDirLocalt = Path.Combine(strDirLocalr, "Cookies");

string[] filePaths = Directory.GetFiles(strDirLocalt);
foreach (string filePath in filePaths)
    File.Delete(filePath);

Ответы [ 7 ]

11 голосов
/ 02 апреля 2011

Это работает:

string[] filePaths = Directory.GetFiles(strDirLocalt);
foreach (string filePath in filePaths)
{
    var name = new FileInfo(filePath).Name;
    name = name.ToLower();
    if (name != "index.dat")
    {
        File.Delete(filePath);
    }
}
4 голосов
/ 02 апреля 2011

Проверьте это интересное решение!

List<string> files = new List<string>(System.IO.Directory.GetFiles(strDirLocalt));
files.ForEach(x => { try { System.IO.File.Delete(x); } catch { } });

Почувствуйте красоту языка!

2 голосов
/ 02 апреля 2011

Просто поместите try / catch вокруг File.Delete, потому что может быть больше используемых файлов, которые также будут генерировать исключения.

try
{
  File.Delete(filePath);
}
catch (Exception ignore)
{
}
1 голос
/ 02 апреля 2011
string[] filePaths = Directory.GetFiles(strDirLocalt); 
foreach (string filePath in filePaths)
 try {
   File.Delete(filePath);
 }
 catch{ }
}
0 голосов
/ 29 августа 2011

Один из методов, который все еще может работать, - это загрузиться в безопасном режиме, а затем назначить себе права администратора и посмотреть, сможете ли вы найти файлы для их удаления

Метод, который я сейчас использую, состоит в том, чтобы создать пакетный файл, чтобы переименовать подпапку под папкой, содержащей файлы index.bat, а затем только скопировать папки обратно в исходное местоположение, в котором не содержатся эти файлы, а получен пакет файлы должны запускаться из отдельной учетной записи Windows с полными правами администратора.

0 голосов
/ 02 апреля 2011

Почему бы просто не перехватить исключение - есть вероятность, что любой из файлов может использоваться при попытке их удаления.

try{
     // delete
}
catch{
}
0 голосов
/ 02 апреля 2011

Просто отфильтруйте его из списка

foreach (string filePath in filePaths.Where(!filePath.Contains("index.dat"))
    File.Delete(filePath);
...