修改此代码需要帮助

时间:2009-04-22 05:25:37

标签: c# file

我想从特定驱动器的所有目录中删除所有.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();
}

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

你的代码看起来很好。如果您输入else条件,则表示d:\ test(或任何子文件夹)下没有.rar文件,或者您运行代码的帐户没有此文件夹的读取权限。

答案 2 :(得分:0)

很少有建议:

  1. 检查文件或目录是否未标记为隐藏。
  2. 尝试FileInfo[] dirRar = dirMain.GetFiles("*.*");对每个文件进行迭代,然后检查是否收到了rar文件

答案 3 :(得分:0)

它适用于此。

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