【问题标题】:Need help by modifying this code通过修改此代码需要帮助
【发布时间】:2009-04-22 05:25:37
【问题描述】:

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

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

【问题讨论】:

    标签: c# file


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        一些建议:

        1. 检查文件或目录是否未标记为隐藏。
        2. 尝试FileInfo[] dirRar = dirMain.GetFiles("*.*"); 迭代每个文件并检查您是否获得了rar 文件

        【讨论】:

          【解决方案4】:

          在这里工作。

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

          【讨论】:

            猜你喜欢
            • 2010-11-04
            • 2015-07-16
            • 1970-01-01
            • 2013-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-10
            • 1970-01-01
            相关资源
            最近更新 更多