/// <summary>
/// 填充目录文件到树视图
/// 1.获取系统上的所有逻辑驱动器
/// 2.在每个逻辑驱动器上获取驱动器顶级目录列表,并遍历子目录
///注:本程序参考《C#程序设计》
/// </summary>
/// <param name="tvw"></param>
/// <param name="isSource"></param>
private void FillDirectoryTree(TreeView tvw,bool isSource)
{
tvw.Nodes.Clear();
//获取系统上的所有逻辑驱动器
string[] strDrives=Environment.GetLogicalDrives();
foreach(string rootDirectoryName in strDrives)
{
//if(rootDirectoryName !=@"E:")
// continue;
try
{
//获取驱动器顶级目录列表
DirectoryInfo dir=new DirectoryInfo(rootDirectoryName);
dir.GetDirectories();
TreeNode ndRoot=new TreeNode(rootDirectoryName);
tvw.Nodes.Add(ndRoot);
if(isSource)
{
GetSubDirectoryNodes(ndRoot,ndRoot.Text,true);
}
else
{
GetSubDirectoryNodes(ndRoot,ndRoot.Text,false);
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
}
}
}
//遍历子目录
private void GetSubDirectoryNodes(TreeNode parentNode,string fullName,bool getFileNames)
{
DirectoryInfo dir = new DirectoryInfo(fullName);
DirectoryInfo[] dirSubs=dir.GetDirectories();
//为每一个子目录添加一个子接点
foreach(DirectoryInfo dirSub in dirSubs)
{
//不显示隐藏文件夹
if((dirSub.Attributes&FileAttributes.Hidden)!=0)
{
continue;
}
TreeNode subNode=new TreeNode(dirSub.Name);
parentNode.Nodes.Add(subNode);
//递归调用GetSubDirectoryNodes
GetSubDirectoryNodes(subNode,dirSub.FullName,getFileNames);
}
//获取目录中的文件
if(getFileNames)
{
FileInfo[] files=dir.GetFiles();
foreach(FileInfo file in files)
{
TreeNode fileNode=new TreeNode(file.Name);
parentNode.Nodes.Add(fileNode);
}
}
}