C#使用dir命令实现文件搜索功能示例
本文实例讲述了C#使用dir命令实现文件搜索功能。分享给大家供大家参考,具体如下:
以往,我都是使用System.IO.Directory.GetDirectories()和System.IO.Directory.GetFiles()方法遍历目录搜索文件。但实际的执行效果始终差强人意,在检索多种类型文件方面不够强大,尤其是在检索特殊文件夹或遇到权限不足时会引发程序异常。
这次为朋友写了个检索图片的小程序,在仔细研究了Process以及ProcessStartInfo之后,决定利用这两个类以及系统命令dir对文件进行检索。
privatevoidsearch() { //多种后缀可使用exts定义的方式 varext="*.jpg"; varexts="*.jpg*.png*.gif"; varfolder="D:\\"; varoutput=newStringBuilder(); if(System.IO.Directory.Exists(folder)) { stringpath=System.IO.Path.Combine(folder,exts); stringargs=string.Format("/cdir\"{0}\"/b/l/s",path); //如果仅搜索文件夹可以使用下面的参数组合 //stringargs=string.Format("/cdir\"{0}\"/ad-s-h/b/l/s",folder); varcompiler=newSystem.Diagnostics.Process(); compiler.StartInfo.FileName="cmd.exe"; compiler.StartInfo.Arguments=args; compiler.StartInfo.CreateNoWindow=true; compiler.StartInfo.UseShellExecute=false; compiler.StartInfo.RedirectStandardOutput=true; compiler.OutputDataReceived+=(obj,p)=> { //根据p.Data是否为空判断dir命令是否已执行完毕 if(string.IsNullOrEmpty(p.Data)==false) { output.AppendLine(p.Data); //可以写个自定义类//然后利用static FromFile(stringpath)的方式进行实例化 //最后利用List .Add的方法将其加入到List中以便后续处理 //*数据量很大时慎用 } else { //运行到此处则表示dir已执行完毕 //可以在此处添加对output的处理过程 //也可以自定义完成事件并在此处触发该事件, //将output作为事件参数进行传递以便外部程序调用 } }; compiler.Start(); compiler.BeginOutputReadLine();//开始异步读取 compiler.Close(); } }
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》
希望本文所述对大家C#程序设计有所帮助。