删除目录中文件的最快方法是什么? (特定文件扩展名除外)
我看过诸如清空目录的最佳方法之类的问题?
但我需要知道,
除了找到的任何.zip
文件之外,删除目录中找到的所有文件的最快方法是什么。
在这里闻到像linq ……还是什么?
通过说最快的方式,我的意思是最快的执行时间。
如果您使用的是.NET 4,那么您可以利用.NET现在将您的function平行化的智能方式。 这段代码是禁食的方式。 这也与处理器上的核心数量相称。
DirectoryInfo di = new DirectoryInfo(yourDir); var files = di.GetFiles(); files.AsParallel().Where(f => f.Extension != ".zip").ForAll((f) => f.Delete());
您要求最少的代码行或最快的执行时间? 下面是一个使用LINQ的示例,每个循环都有一个并行的快速删除它们。
string[] files = System.IO.Directory.GetFiles("c:\temp", "*.*", IO.SearchOption.TopDirectoryOnly); List del = ( from string s in files where ! (s.EndsWith(".zip")) select s).ToList(); Parallel.ForEach(del, (string s) => { IO.File.Delete(s); });
在撰写此答案时,以前的答案都没有使用Directory.EnumerateFiles(),它允许您在构造列表时对文件列表进行操作。 码:
Parallel.ForEach(Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).AsParallel(), Item => { if(!string.Equals(Path.GetExtension(Item), ".zip",StringComparison.OrdinalIgnoreCase)) File.Delete(Item); });
据我所知,在这种情况下,使用AsParallel()的性能提升不应该很大(如果找到),但它确实在我的情况下有所不同。
我比较了删除4689个文件列表中所有的.zip文件所需的时间,其中10个是使用1-foreach的zip文件。 2平行的foreach。 3- IEnumerable的()。进行AsParallel()。的ForAll。 4-parallel foreach使用IEnumerable()。AsParallel()如上图所示。 结果:
1-1545
2-1015
3-1103
4-839
第五个也是最后一个案例是使用Directory.GetFiles()的普通foreach
5-2266
当然结果并不是决定性的,据我所知,要进行适当的基准测试,你需要使用ram驱动器而不是硬盘驱动器。
注意:随着文件数量的增加,EnumerateFiles和GetFiles之间的性能差异变得更加明显。
这是普通的旧C#
foreach(string file in Directory.GetFiles(Server.MapPath("~/yourdirectory"))) { if(Path.GetExtension(file) != ".zip") { File.Delete(file); } }
这是LINQ
上述就是C#学习教程:删除目录中文件的最快方法是什么? (特定文件扩展名除外)分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
var files = from f in Directory.GetFiles("") where Path.GetExtension(f) != ".zip" select f; foreach(string file in files) File.Delete(file);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984273.html