#region MyRegion
// 填充目录和文件到 TreeView 控件中
// isSource 表示是否显示文件
private void FillTree(TreeView treeView, bool isSource)
{
treeView.Nodes.Clear(); // 清空
// 获取系统上的所有逻辑驱动器
string[] strDrives = Environment.GetLogicalDrives();
foreach (string rootDirectoryName in strDrives)
{
try
{
// 获取驱动器顶级目录列表
DirectoryInfo dir = new DirectoryInfo(rootDirectoryName);
// 如果获得的目录信息正确,则将它添加到 TreeView 控件中
if (dir.Exists == true)
{
TreeNode newNode = new TreeNode(rootDirectoryName);
treeView.Nodes.Add(newNode);
if (isSource)
{
GetSubDirectoryNodes(newNode, newNode.Text, true);
}
else
{
GetSubDirectoryNodes(newNode, newNode.Text, false);
}
}
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
}
}
// 遍历子目录
private void GetSubDirectoryNodes(TreeNode parentNode, string fullName, bool getFileNames)
{
DirectoryInfo dir = new DirectoryInfo(fullName);
DirectoryInfo[] subDirs = dir.GetDirectories();
// 为每一个子目录添加一个子节点
foreach (DirectoryInfo subDir in subDirs)
{
// 不显示隐藏文件夹
if ((subDir.Attributes & FileAttributes.Hidden) != 0)
{
continue;
}
TreeNode subNode = new TreeNode(subDir.Name);
parentNode.Nodes.Add(subNode);
// 递归调用GetSubDirectoryNodes
GetSubDirectoryNodes(subNode, subDir.FullName, getFileNames);
}
// 获取目录中的文件
if (getFileNames)
{
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
TreeNode fileNode = new TreeNode(file.Name);
parentNode.Nodes.Add(fileNode);
}
}
}
#endregion