2009-04-22 5 views
1

Я хочу удалить все файлы расширения .rar из любого каталога с определенным диском. Скажем, у меня есть «D: \ Test», при этом я создал много файлов .rar или .zip. После запуска программы только весь .rar-файл должен быть удален, а другие файлы расширений должны оставаться одинаковыми, и он должен показать, что количество файлов rar не было удалено. Я могу создать n файлов в n detpht подкаталога, но при запуске программы все файлы .rar должны быть удалены. Для этого я написал программу, и я создал много файлов в этом конкретном диске, но когда я запускаю приложение, говоря, что нет файлов, я имею в виду, что он всегда проверяет условие else. Вот мой код, кто-то его модифицирует.0 Вам нужно помочь, изменив этот код.

static void Main(string[] args) 
{ 
    DirectoryInfo dirMain = new DirectoryInfo("D:\\Test"); 
    if (dirMain != null) 
    { 
     FileInfo[] dirRar = dirMain.GetFiles("*.rar", SearchOption.AllDirectories); 
     if (dirRar != null && dirRar.Length > 0) 
     { 
      for (int i = 0; i < dirRar.Length; i++) 
      { 
       Console.WriteLine(dirRar[i].FullName); 
       dirRar[i].Delete(); 
      } 
      Console.WriteLine("Total no of files deleted" + dirRar.Length.ToString()); 
     } 
     else 
     { 
      Console.WriteLine("There is no file"); 
     } 
    } 
    Console.ReadKey(); 
} 

ответ

0

Вы код выглядит хорошо. Если вы входите в условие else, это означает, что в файле d: \ test (или любых подпапках) нет файлов .rar или что у учетной записи, на которой выполняется ваш код, нет прав на чтение для этой папки.

0

Несколько предложений:

  1. Убедитесь, что файлы или каталог не помечен как скрытый.
  2. Попробуйте FileInfo[] dirRar = dirMain.GetFiles("*.*"); итерацию по каждому файлу и проверьте, что вы получаете файл RAR
+1

Спасибо MR. Soni теперь работает отлично ... – user59637

0

Он работает здесь.

Все rar-файлы в D: \ Test были удалены.

1

Прекрасно работает для меня; возможно, проверьте, что существует d:\Test? Отметим, что рекурсивная перегрузка GetFiles немного шелушилась, когда она попадает в сложные наборы разрешений. Вы бы лучше делать рекурсию вручную, используя try/catch вокруг подпапок:

int count = 0; 
Queue<string> dirs = new Queue<string>(); 
dirs.Enqueue(@"d:\Test"); 
while(dirs.Count > 0) { 
    string dir = dirs.Dequeue(); 
    try 
    { 
     foreach (string subdir in Directory.GetDirectories(dir)) 
     { 
      dirs.Enqueue(subdir); 
     } 
    } 
    catch (Exception ex) { Console.Error.WriteLine(ex); }// access denied etc 

    foreach (string file in Directory.GetFiles(dir, "*.rar")) 
    { 
     try 
     { 
      File.Delete(file); 
      count++; 
     } 
     catch (Exception ex) { Console.Error.WriteLine(ex); }// access denied etc 
    } 
} 
Console.WriteLine("Deleted: " + count); 
Смежные вопросы