如何在TreeView中显示目录?

以下是我的代码

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); private void Form1_Load(object sender, EventArgs e) { if (Directory.Exists("FileExplorer")) { try { DirectoryInfo[] directories = directoryInfo.GetDirectories(); foreach (FileInfo file in directoryInfo.GetFiles()) { if (file.Exists) { TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); } } if (directories.Length > 0) { foreach (DirectoryInfo directory in directories) { TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); node.ImageIndex = node.SelectedImageIndex = 0; foreach (FileInfo file in directory.GetFiles()) { if (file.Exists) { TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); } } } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } 

当我跑步时,我得到一张空白的树形图表? 无法弄清楚错误是什么?

这是我在Stack Overflow中的第一篇文章。

这应该解决你的问题,我试过WinForm虽然:

 public Form1() { InitializeComponent(); DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\hikuma\Documents\IR"); if (directoryInfo.Exists) { treeView1.AfterSelect += treeView1_AfterSelect; BuildTree(directoryInfo, treeView1.Nodes); } } private void BuildTree(DirectoryInfo directoryInfo, TreeNodeCollection addInMe) { TreeNode curNode = addInMe.Add(directoryInfo.Name); foreach (FileInfo file in directoryInfo.GetFiles()) { curNode.Nodes.Add(file.FullName, file.Name); } foreach (DirectoryInfo subdir in directoryInfo.GetDirectories()) { BuildTree(subdir, curNode.Nodes); } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if(e.Node.Name.EndsWith("txt")) { this.richTextBox1.Clear(); StreamReader reader = new StreamReader(e.Node.Name); this.richTextBox1.Text = reader.ReadToEnd(); reader.Close(); } } 

这是一个如何在富文本框中打开文件的简单示例,它可以得到很多改进:)。 你可能想要标记为答案或投票,如果它有帮助:)!

试试这个:(注意确保你的directoryInfo位置包含一些文件夹)

 DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Users\Shahul\Documents\Visual Studio 2010\Projects\TreeView\TreeView\bin\FileExplorer"); private void Form1_Load(object sender, EventArgs e) { if (directoryInfo.Exists) { try { treeView.Nodes.Add(directoryInfo.Name); DirectoryInfo[] directories = directoryInfo.GetDirectories(); foreach (FileInfo file in directoryInfo.GetFiles()) { if (file.Exists) { TreeNode nodes = treeView.Nodes[0].Nodes.Add(file.Name); } } if (directories.Length > 0) { foreach (DirectoryInfo directory in directories) { TreeNode node = treeView.Nodes[0].Nodes.Add(directory.Name); node.ImageIndex = node.SelectedImageIndex = 0; foreach (FileInfo file in directory.GetFiles()) { if (file.Exists) { TreeNode nodes = treeView.Nodes[0].Nodes[node.Index].Nodes.Add(file.Name); } } } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } 

DirectoryInfo.Exists(“FileExplorer”)将检查“C:\ Users \ Shahul \ Documents \ Visual Studio 2010 \ Projects \ TreeView \ TreeView \ bin \ debug \ FileExplorer”,而不是“C:\ Users \ Shahul \ Documents \ Visual”在调试模式下运行时,Studio 2010 \ Projects \ TreeView \ TreeView \ bin \ FileExplorer“。

请尝试以下方法:

 private void Form1_Load(object sender, EventArgs e) { if (directoryInfo.Exists) { try { treeView.Nodes.Add(LoadDirectory(directoryInfo)); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } private TreeNode LoadDirectory(DirectoryInfo di) { if (!di.Exists) return null; TreeNode output = new TreeNode(di.Name, 0, 0); foreach (var subDir in di.GetDirectories()) { try { output.Nodes.Add(LoadDirectory(subDir)); } catch (IOException ex) { //handle error } catch { } } foreach (var file in di.GetFiles()) { if (file.Exists) { output.Nodes.Add(file.Name); } } return output; } } 

最好将目录解析拆分为递归方法,以便您可以一直走到树下。

这将阻止UI直到它完全加载 – 但修复它超出了这个答案的范围……

🙂