Я работаю над простым переносимым приложением для одной формы, в котором * .exe и папка UserGeneratedContent находятся в одном каталоге.В моей форме есть древовидное представление, которое я хочу заполнить узлами, соответствующими всем подпапкам (если они существуют) UserGeneratedContent.Код, который я вставил ниже, работает почти так, как я хочу, но он заполняет древовидную структуру UserGeneratedContent в качестве корневого узла и, в свою очередь, обрабатывает найденные подпапки как дочерние узлы и т. Д.
string folder = @"UserGeneratedContent";
FolderHierachy.Nodes.Add(GetDirectoryNodes(folder));
private static TreeNode GetDirectoryNodes(string path)
{
var node = new TreeNode(Path.GetFileName(path));
var subDirs = Directory.GetDirectories(path).Select(d => GetDirectoryNodes(d)).ToArray();
node.Nodes.AddRange(subDirs);
return node;
}
На этом этапе я попробовал практически каждую комбинацию @ "UserGeneratedContent", о которой я могу подумать - добавив обратную косую черту и т. Д., Пытаясь получить доступ к подпапкам, но мне не повезло.Я знаю, что это, вероятно, что-то простое, но я застрял - какой правильный синтаксис гарантирует, что вышеописанный метод проверяет UserGeneratedContent для получения подпапок?
Кроме того, я хочу, чтобы элемент управления treeview позволялпользователь может создавать, переименовывать и удалять папки в любой иерархии по своему выбору, поэтому мне интересно, что будет считаться наилучшей практикой в этом отношении?
Редактировать \ Обновить # 1 - 12.2.2012:
После гораздо большего количества проб и ошибок я отказался от приведенного выше кода - независимо от того, что я пытался, я не мог заставить его работать по какой-то причине.К счастью, приведенный ниже код отлично работает для меня: -)
DirectoryInfo dirInfo = new DirectoryInfo(@"UserGeneratedContent");
DirectoryInfo[] subDirs = dirInfo.GetDirectories();
string pathToSubFolders = Path.Combine(@"UserGeneratedContent", subDirs[0].ToString());
PopulateTreeView(treeView1, pathToSubFolders);
private void PopulateTreeView(TreeView treeView, string path)
{
treeView.Nodes.Clear();
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeNode(directoryInfo.Name);
foreach(var directory in directoryInfo.GetDirectories())
{
directoryNode.Nodes.Add(CreateDirectoryNode(directory));
}
return directory;
}
Мне нужно добавить в него код обработки ошибок, чтобы не было подпапок в @ "UserGeneratedContent" - как есть subDirs[0].ToString()
выдает исключение IndexOutOfRangeException, если нет подпапок, и я не совсем уверен, как это сделать, поэтому я был бы благодарен за некоторые указатели.
Редактирование \ Обновление № 2 - 12.2.2012:
Для проверки ошибок я использовал блок try-catch, как показано ниже:
try
{
string pathToSubFolders = Path.Combine(dirInfo.ToString(), subDirs[0].ToString());
PopulateTreeView(treeView1, pathToSubFolders);
}
catch (IndexOutOfRangeException)
{
//Do Something Here
}
Приведенный выше код работает, но кто-нибудь может сказать мне, правильно ли я поступил?
Спасибо за чтение.