简单的遍历很简单,直接用递归实现就是但是要考虑一些问题
遍历的目的是得到 每一个文件的相关信息(访问时间这种信息)
若目录下的子目录层数比较深,文件个数比较多,怎么做可以让效率比较好,比如可以用较快的时间遍历完,比如不因为
子目录层数深,文件个数多让程序停止响应
而且稳定性要很好,程序是24小时不停跑的,定时去遍历
可以指定遍历的深度有什么现成的类或什么
好的办法倒是找到一篇文章
C#使用WIN32API来高效率的遍历文件和目录 

解决方案 »

  1.   

    遍历一次,然后用FileSystemWatcher 监视文件系统。
      

  2.   

    public ArrayList al=new ArrayList();
    //我把ArrayList当成动态数组用,非常好用
    public void GetAllDirList(string strBaseDir)
    {
        DirectoryInfo di=new DirectoryInfo(strBaseDir);
        DirectoryInfo[] diA=di.GetDirectories();
       for(int i=0;i<diA.Length;i++)
        {
         al.Add(diA[i].FullName);
        //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
         GetAllDirList(diA[i].FullName);
        }
    }最后,如何把所有目录信息从ArrayList中取出来呢?如下:
    for(int i=0;i<al.Count;i++)
    {
         textBox1.AppendText(al[i].ToString()+" ");
    }
      

  3.   


    //递归算法--遍历指定目录下的子目录及文件(C#.net),希望有用,顺带数据入库 private void button1_Click(object sender, System.EventArgs e) 

    Conn.Open(); displayItems(textBox1.Text); 
    //MessageBox.Show(dirs.Length.ToString()); 
    Conn.Close(); 

    /*这里是递归算法的遍历程序部分*/ 
    private void displayItems(string path) 

    try 

    DirectoryInfo di=new DirectoryInfo(path); 
    FileInfo[] SubFiles=di.GetFiles(); FileSystemInfo[] dirs = di.GetDirectories(); foreach(FileInfo fileNext in SubFiles) 

    /*-----------------------------------------------------------------------------------------------------*/ 
    string path_total=path + "/" +fileNext.ToString(); 
    int path_start=path_total.IndexOf("/")+1; 
    int path_end=path_total.LastIndexOf("/"); 
    string path_name; 
    if(path_start-1==path_end) 

    path_name=""; 

    else 

    path_name=path.Substring(path_start,path_end-path_start); 

    switch(path_start.ToString()) 

    case "....": 
    break; 

    /*-----------------------------------------------------------------------------------------------------*/ 
    string sql="insert into pic_data(pic_name,pic_path,pic_time) values(’"+ fileNext.ToString() +"’,’"+ path_name +"’,’"+ DateTime.Now.ToString() +"’)"; 
    SqlCommand Cmd=new SqlCommand(sql,Conn); 
    if(checkBox_insertdb.Checked==true) 
    Cmd.ExecuteNonQuery(); richTextBox1.Text=richTextBox1.Text + "\r\n" + path + "/" +fileNext.ToString() + " ("+sql+")"; 

    foreach(DirectoryInfo diNext in dirs) 

    displayItems(path + "/" + diNext.ToString()); 


    catch(Exception ex) 

    richTextBox1.Text=ex.Message +"\r\n"+ richTextBox1.Text; 
    } }