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);
//可以写个自定义类
//然后利用staticFromFile(stringpath)的方式进行实例化
//最后利用List.Add的方法将其加入到List中以便后续处理
//*数据量很大时慎用
}
else
{
//运行到此处则表示dir已执行完毕
//可以在此处添加对output的处理过程
//也可以自定义完成事件并在此处触发该事件,
//将output作为事件参数进行传递以便外部程序调用
}
};
compiler.Start();
compiler.BeginOutputReadLine();//开始异步读取
compiler.Close();
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#文件操作常用技巧汇总》、《C#遍历算法与技巧总结》、《C#程序设计之线程使用技巧总结》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》及《C#面向对象程序设计入门教程》
希望本文所述对大家C#程序设计有所帮助。