Я взял твой код, и он работает очень хорошо,
но я сделал небольшую модификацию для улучшения скорости загрузки
когда он используется с большим списком файлов
похоже на операцию поиска, а строковые операции обычно очень медленные
private TreeNode PopulateTreeNode2(string[] paths, string pathSeparator)
{
if (paths == null)
return null;
TreeNode thisnode = new TreeNode();
TreeNode currentnode;
char[] cachedpathseparator = pathSeparator.ToCharArray();
foreach (string path in paths) {
currentnode = thisnode;
foreach (string subPath in path.Split(cachedpathseparator))
{
if (null == currentnode.Nodes[subPath])
currentnode = currentnode.Nodes.Add(subPath, subPath);
else
currentnode = currentnode.Nodes[subPath];
}
}
return thisnode;
}
тогда вы можете использовать:
string[] paths = {
@"C:\WINDOWS\AppPatch\MUI\040C",
@"D:\WINDOWS\Microsoft.NET\Framework\v2.0.50727",
@"E:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI",
@"C:\WINDOWS\addins",
@"C:\WINDOWS\AppPatch",
@"C:\WINDOWS\AppPatch\MUI",
@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MUI\0409"
};
TreeView treeview = new TreeView();
treeview.Nodes.Add(PopulateTreeNode2(paths, "\\"));
ПРИМЕЧАНИЕ: возможно, в обоих решениях потребуется проверка чувствительности строки
для предотвращения повторного создания некоторых папок.
потому что некоторый URL может указывать на одну и ту же папку на диске
но пишется по-другому, например:
Окна; ОКНА, ОКНА