日期:2014-05-19  浏览次数:20753 次

本人想搜索出整个硬盘的指定类型的文件(如TXT),还请各位热心帮忙解决,先谢了!
功能:通过程序自动搜索所有驱动盘中的指定类型的文件

已用方法:
1、通过全盘目录递归方式查找文件,但是其速度太慢,并且操作界面会导致死锁,没法点击
2、利用OpenFileDialog对象,设置文件夹与过滤条件后,取得的filenames总为空
OpenFileDialog       openFileDialog1       =       new       OpenFileDialog();      
       
openFileDialog1.InitialDirectory       =       "C:\\Documents   and   Settings\\Administrator "       ;      
openFileDialog1.Filter       =       "*.txt|*.xsl ";      
openFileDialog1.FilterIndex       =       2       ;      
openFileDialog1.RestoreDirectory       =       true;

foreach   (string   a   in   (openFileDialog1.FileNames))
{
textBox3.Text   +=   a;}

本人手头的分不多了,还请各位热心帮助,先谢了!
QQ:71181397


------解决方案--------------------
public void FindFile(string pathstr)
{
DirectoryInfo Dir = new DirectoryInfo(pathstr);
try
{

//textBox1为基础文件夹,textBox2为文件的扩展名
foreach (DirectoryInfo d in Dir.GetDirectories())
{
FindFile(Dir+d.ToString()+ "\\ ");
richTextBox1.AppendText(Dir + d.ToString() + "\\ ");
richTextBox1.AppendText( "\n ");
}
foreach (FileInfo f in Dir.GetFiles( "*. "+textBox2.Text))
{
richTextBox1.AppendText(Dir+f.ToString());
richTextBox1.AppendText( "\n ");
}
}
catch
{
}
}
textbox2.text是文件格式,希望对你有用

------解决方案--------------------
private void FindFiles(string _strPath,MenuItem menuItemParent)
{
DirectoryInfo[] dinfo;
FileInfo[] finfo;
DirectoryInfo directoryinfo;

MenuItem _menuItemFolder;
MenuItem _menuItemFile;

//当前路径下信息
directoryinfo=new DirectoryInfo(_strPath);
//文件夹信息
dinfo= directoryinfo.GetDirectories();
//当前路径下所有文件
finfo =directoryinfo.GetFiles(@ "*. "+this.strFileType);

if(finfo.Length==0)//若当前路径下不存在文件
{

}
else//若当前路径下存在文件
{
for(int j=0;j <finfo.Length;j++)
{
//this.listBox1.Items.Add(finfo[j].FullName);
_menuItemFile=new MenuItem(System.IO.Path.GetFileName(finfo[j].FullName));
_menuItemFile.Click+=new EventHandler(OpenFile);
//_menuItemFile.
//menuItemParent.MenuItems.Add(new MenuItem(System.IO.Path.GetFileName(finfo[j].FullName)));
menuItemParent.MenuItems.Add(_menuItemFile);
}
}

//当前路径下所有文件夹
if(dinfo.Length==0)//若当前目录路径下不存在下属文件夹
{

}
else
{
//this.intDepthPosition++;
//if(this.intDepthPosition <this.intFindDepth+1)
//{
for(int i=0;i <dinfo.Length;i++)
{
//_menuItemFolder=new MenuItem(System.IO.Path.GetDirectoryName(dinfo[i].FullName));
_menuItemFolder=new MenuItem(dinfo[i].FullName.Replace(_strP