2013-08-28 2 views
0

У меня есть две задачи в рукеУдалить все файлы и каталоги, кроме тех, в списке

  1. Получите 10 последних файлов из папки позволяет говорить C:\Temp и
  2. Удалите любые другие папки и файлы.

У меня есть первый элемент, который работает с использованием приведенного ниже кода, спасибо за наших друзей в Stack Overflow.

var imgFiles = (from f in directory.GetFiles(fileType,SearchOption.AllDirectories) 
          orderby f.LastWriteTime descending 
          select f).Take(numberOfFilesToFetch).ToArray(); 

мне нужна помощь с точки 2. Некоторые образцы C# код будет очень полезно.

ответ

0

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

Другие ПОДХОД снова вызывают GetFiles с За исключением вызова, который не очень эффективен, если вам не нужен список файлов для игнорирования во время процесса удаления

var filesToBeDeleted = (from f in Directory.GetFiles(fileType,SearchOption.AllDirectories) 
          orderby f.LastWriteTime descending 
          select f).Skip(numberOfFilesToFetch).ToArray(); 

foreach (var file in filesToBeDeleted) 
{ 
    file.Delete(); 
} 

string [] subdirectoryEntries = Directory.GetDirectories("c:\\temp"); 

foreach(string dir in subdirectoryEntries) 
{ 
    Directory.Delete(dir) ; 
} 

Я рекомендую вам добавить попробовать, поймать для операции удаления

+0

Вышеприведенное работает, однако оно удаляет файлы, а не папки. – Abe

+0

@ Я просто добавил часть, чтобы удалить папки –

+0

Спасибо. Теперь он работает. – Abe

0
foreach (var file in directory.GetFiles().Except(imgFiles)) 
{ 
    file.Delete(); 
} 
+0

вы призывающие GetFiles снова, который является не очень эффективным. Почему бы не изменить исходный LINQ так, чтобы он удалял только файлы? –

0
var filesToBeDeleted = directory.GetFiles(fileType, SearchOption.AllDirectories) 
           .Except(imgFiles).ToArray(); 
for (int i = filesToBeDeleted.Length; i >= 0; i--) 
    filesToBeDeleted[i].Delete(); 
+0

вы снова вызываете GetFiles, что не очень эффективно. Почему бы не изменить исходный LINQ так, чтобы он удалял только файлы? –

Смежные вопросы