实现效果:

知识运用:
DirectoryInfo类的GetFileSystemInfo方法 //检索当前目录的文件和子目录的强类型FileSystemInfo对象的数组
public FileSystemInfo[] GetFileSystmeInfo()
FileInfo类的DirectoryName属性 //获取表是目录的完整路径的字符串
public string DircetoryName {get;}
FileInfo类的Name属性 //获取文件名
public override string Name{get;}
实现代码:
private void button1_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = folderBrowserDialog1.SelectedPath; //显示选择文件夹的路径
tempstr = folderBrowserDialog1.SelectedPath; //存储选择文件夹的路径
}
thdAddFile = new Thread(new ThreadStart(SetAddFile)); //创建一个线程
thdAddFile.Start(); //启动线程
}
public delegate void AddFile(); //定义委托线程
public void SetAddFile()
{
this.Invoke(new AddFile(RunAddFile)); //对指定的线程进行托管
}
public void RunAddFile()
{
TreeNode TNode = new TreeNode();
File_Copy(treeView1,tempstr,TNode,0); //执行遍历方法
Thread.Sleep(0); //挂起主线程
thdAddFile.Abort(); //退出线程
}
/// <summary>
/// 一个递归方法用来遍历制定文件夹下的
/// 所有子文件夹河文件
/// </summary>
/// <param name="TV">TreeView控件</param>
/// <param name="Sdir">指定文件夹的路径</param>
/// <param name="TNode">TreeView控件的当前节点</param>
/// <param name="n">指定是文件还是文件夹</param>
private void File_Copy(TreeView TV,string Sdir,TreeNode TNode,int n)
{
DirectoryInfo dir = new DirectoryInfo(Sdir);
try
{
if (!dir.Exists) //判断所指文件或文件夹是否存在
return;
DirectoryInfo dirD = dir as DirectoryInfo;
if (dirD == null)
return;
else
{
if (n == 0)
{
TNode = TV.Nodes.Add(dirD.Name); //添加文件夹的名称
TNode.Tag = 1;
}
else
{
TNode = TNode.Nodes.Add(dirD.Name); //文件夹中添加子文件夹的名称
TNode.Tag = 1;
}
}
FileSystemInfo[] files = dirD.GetFileSystemInfos(); //获取文件夹中所有文件和文件夹
foreach (FileSystemInfo FSys in files) //对单个FileSystemInfo进行判断 是文件夹则递归
{
FileInfo file = FSys as FileInfo;
if (file != null) //是文件 进行操作
{
FileInfo SFinfo = new FileInfo(file.DirectoryName + "\\" + file.Name); //文件的原始路径
TNode.Nodes.Add(SFinfo.Name); //添加文件
TNode.Tag = 1;
}
else
{
File_Copy(TV,Sdir+"\\"+FSys.ToString(),TNode,1); //对文件夹进行递归
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
浙公网安备 33010602011771号