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