我想从特定驱动器的所有目录中删除所有.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 :(得分: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)
很少有建议:
FileInfo[] dirRar = dirMain.GetFiles("*.*");
对每个文件进行迭代,然后检查是否收到了rar文件答案 3 :(得分:0)
它适用于此。
D:\ Test中的所有rar文件都已删除。