Есть код:
static void Main(string[] args)
{
Scan("folder");
Console.ReadKey();
}
static void Scan(string path)
{
foreach (string f in Directory.GetFiles(path))
{
Console.WriteLine(f);
}
foreach (string d in Directory.GetDirectories(path))
{
Console.WriteLine(d);
Scan(d);
}
}
Вывод:
И вопрос: как это все добавить в TreeView, который в WPF, чтоб выглядело примерно на картинке? Типа обозреватель файлов
OK, для того, чтобы отобразить данные в TreeView, их нужно правильно приготовить. Элемент должен быть иерархическим, т.е. он должен иметь внутри себя ссылку на список дочерних элементов такого же типа. Не мудрствуя лукаво, я написал такой простейший класс:
class FileSystemEntry
{
public string Name { get; }
public IEnumerable<FileSystemEntry> Children { get; }
public FileSystemEntry(string name, params FileSystemEntry[] children)
{
Name = name;
Children = children;
}
}
Я не стал заморачиваться, этот класс будет использоваться у меня и для файлов и для папок. Для файла достаточно передать один параметр-имя в конструктор, для папки дополнительно передаем массив дочерних элементов.
Теперь нам надо завести коллекцию корневых элементов (элементов верхнего уровня):
public IEnumerable<FileSystemEntry> FileSystemEntries { get; }
и как-то ее заполнить.
Метод для сканирования из вопроса нам не подходит, т. к. он выводит всё в консоль, но принцип, в нем использованный – то что нужно. Я переписываю так:
IEnumerable<FileSystemEntry> Scan(string path)
{
// Папки будут идти в начале
foreach (var dir in Directory.EnumerateDirectories(path))
yield return new FileSystemEntry(Path.GetFileName(dir), Scan(dir).ToArray());
// Файлы потом
foreach (var file in Directory.EnumerateFiles(path))
yield return new FileSystemEntry(Path.GetFileName(file));
}
Остается только вызвать этот метод с каким-то параметром:
var path = @"C:\Program Files\Microsoft Visual Studio";
FileSystemEntries = Scan(path).ToArray();
Коллекция заполнена, надо только привязать ее в GUI:
<TreeView ItemsSource="{Binding FileSystemEntries}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<ContentPresenter Content="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Должно получиться что-то вроде:
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники