По сути, у вас будет рекурсивный цикл, подобный следующему:
protected void Populate(TreeNode parentNode, DirectoryInfo directory)
{
foreach (DirectoryInfo dir in directory.GetDirectories())
{
TreeNode node = parentNode.Nodes[dir.Name]
?? parentNode.Nodes.Add(dir.Name, dir.Name);
node.Tag = dir;
// node.ContextMenuStrip = cmenu;
Populate(node, dir);
}
}
Чтобы перетаскивать с помощью TreeView, см. Этот пример Microsoft.