using System.Windows.Forms; namespace Soubory { public class MyTreeNode : TreeNode { public string path; public bool scanned; } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; namespace Soubory { public partial class Form1 : Form { public Form1() { InitializeComponent(); showDisks(); } private void testToolStripMenuItem_Click(object sender, EventArgs e) { showDisks(); } private void showDisks () { // using System.IO; // using System.Windows.Forms; DriveInfo [] drives = DriveInfo.GetDrives (); // for (int i = 0; i < drives.Length; i++) foreach (DriveInfo d in drives) { MyTreeNode node = new MyTreeNode (); node.path = d.Name; // <-- node.Text = d.Name; treeView1.Nodes.Add (node); showDir (node, d.RootDirectory, 1); // <-- } } private void showDir (MyTreeNode above, DirectoryInfo dir, int level) { try { above.scanned = true; // <-- DirectoryInfo [] directories = dir.GetDirectories(); foreach (DirectoryInfo d in directories) { MyTreeNode node = new MyTreeNode(); node.path = d.FullName; // <-- node.Text = d.Name; node.ToolTipText = d.FullName; above.Nodes.Add (node); if (level > 1) showDir (node, d, level-1); } } catch (Exception e) { /* TreeNode node = new TreeNode(); node.Text = "" + e; node.ForeColor = Color.Red; above.Nodes.Add(node); */ } } private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { MyTreeNode node = e.Node as MyTreeNode; if (node != null) rescanDir (node, 2); } private void rescanDir (MyTreeNode above, int level) { if (above.scanned) { if (level > 1) foreach (MyTreeNode node in above.Nodes) rescanDir (node, level-1); } else { showDir (above, new DirectoryInfo(above.path), level); } } } }