2009-04-22 199 views
1

我想从特定驱动器的所有目录中删除所有.rar扩展名文件。假设我在这个“D:\ Test”下创建了许多.rar文件或.zip文件。程序运行后,只应删除所有.rar文件,其他扩展文件应保持不变,并显示已删除多少个rar文件。我可以在n个子目录的detpht中创建n个文件,但是在程序运行时应该删除所有的.rar文件。为此,我编写了一个程序,并且在该驱动器中创建了许多文件,但是当我运行该应用程序时说没有文件,我的意思是它始终检查其他条件。这是我的代码,请有人修改它。需要帮助我修改此代码

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

你的代码看起来不错。如果您输入的是其他条件,则意味着d:\ test(或任何子文件夹)下没有.rar文件,或者您正在运行您的代码的帐户没有对此文件夹的读取权限。

0

几点建议:

  1. 检查文件或目录没有被标记为隐藏。
  2. 尝试FileInfo[] dirRar = dirMain.GetFiles("*.*");迭代上的每个文件,并检查你是否得到你的rar文件
+1

感谢先生。 Soni现在工作得很好... – user59637 2009-04-22 06:05:39

0

它在这里工作。

D:\ Test中的所有rar文件已被删除。

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