Directory类 写一个递归方法 
遍历所有文件 
在遍历的过程中判断文件后缀
留下你想要的信息

解决方案 »

  1.   

    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是文件格式,希望对你有用
      

  2.   

    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(_strPath,"").Replace(@"\",""));
    menuItemParent.MenuItems.Add(_menuItemFolder);
    this.FindFiles(dinfo[i].FullName,_menuItemFolder);
    }
    }
    }
      

  3.   

    我瞎写的。比较垃圾。往menu里面加menu的。大概能用。里面要限制什么类型的,检索深度的自己加下。
      

  4.   

    System.IO.DirectoryInfo di = new DirectoryInfo(@"c:\");
                FileInfo[] fis = di.GetFiles("*.txt", SearchOption.AllDirectories);
                foreach (FileInfo fi in fis)
                {
                    MessageBox.Show(fi.Name);
                }
      

  5.   

    防止UI假死应该使用多线程 否则没有办法 搜索大量文件本身必须费时间
    可以用Directory.GetFiles(path,"*.txt",SearchOption.AllDirectories)
      

  6.   

    关于UI假死的现象,可以简单在循环体或者递归体里面加入
    Application.DoEvents();这是从VB那里学来的。
      

  7.   

    请问, SearchOption.AllDirectories这个在此哪个类里面?system.io里面没有我用的是vs2003
      

  8.   

    Application.DoEvents();
    这个是用来做什么呢?
      

  9.   

    vs2003里面没有SearchOption,可以用递归的方法来解决
    class Class1
    {
    public void GetFiles(string path)
    {
    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(path); // 使用递归检索子目录
    System.IO.DirectoryInfo[] subdirs = dir.GetDirectories();
    foreach (System.IO.DirectoryInfo subdir in subdirs)
    {
    this.GetFiles(subdir.FullName);
    } // 检索目录下的文件
    System.IO.FileInfo[] fis = dir.GetFiles("*.txt");
    foreach (System.IO.FileInfo fi in fis)
    {
    Console.WriteLine(fi.Name);
    }
    } /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
    //
    // TODO: 在此处添加代码以启动应用程序
    //
    new Class1().GetFiles(@"c:\");
    Console.ReadLine();
    }
    }UI假死的话解决办法一般都是把这些操作放到线程中执行
      

  10.   

    现在我采用的还是递归的方式,效率确实很低啊,确实的没法用.
    Application.DoEvents();
    加了还是会死啊,现在总UI假死啊,郁闷的很哦请问一下2005里的sleep在2003中是什么东东呢?
      

  11.   

    System.IO.FileInfo[] c = this.GetFile("C:\\");private System.IO.FileInfo[] GetFile(string strDir)
            {
                System.IO.DirectoryInfo aa = new System.IO.DirectoryInfo(strDir);
                if (aa.GetDirectories().GetLength(0) > 0)
                {
                    foreach (System.IO.DirectoryInfo d in aa.GetDirectories())
                    {
                        Application.DoEvents();
                        System.IO.FileInfo[] fi = GetFile(d.FullName);
                        foreach (System.IO.FileInfo f in fi)
                        {
                            Application.DoEvents();
                            listView1.Items.Add(f.Name);
                        }
                    }
                }            
                return aa.GetFiles();            
            }这个是获取指定目录下所有文件名的代码,测试过不会死机.关键是每个循环都用Application.DoEvents();如果按楼主所说,只要列出本机的所有驱动器,然后将驱动器分别调用这个函数,然后在listView1.Items.Add(f.Name);之前判断扩展名是否楼主所需要的就行了.在2.0测试通过.
      

  12.   

    谢谢各位的热心帮助,现在功能是实现在,但是我做成了activex后,在页面调用时正常,但是关闭IE时就会报错,不知哪问遇到这种情况没?还请指教!