Подходящая коллекция для списка переменной глубины? - PullRequest
2 голосов
/ 09 марта 2010

Если бы я хотел иметь коллекцию, описывающую (рекурсивное) содержимое корневого каталога, включая каталоги и файлы, как бы я их сохранил? Или мне нужно придумать объект, который содержит: -Текущий каталог Родительский каталог -Файлы в каталоге

.. и объедините их все в один большой список и вручную определите отношения во время выполнения для каждой записи Родительский каталог.

Ответы [ 5 ]

1 голос
/ 09 марта 2010

Если классы DirectoryInfo и FileInfo отсутствуют, вам следует использовать Древовидную структуру .

0 голосов
/ 09 марта 2010

На первом снимке я бы попробовал что-то вроде этого:

public class Entry
{
    public string Name { get; private set; }
    public EntryType Type { get; private set; }

    private FileInfo _FileInfo;
    private DirectoryInfo _DirectoryInfo;

    public Entry(FileInfo fileInfo)
    {
        _FileInfo = fileInfo;
        Type = EntryType.FileInfo;
        Name = fileInfo.Name;
    }

    public Entry(DirectoryInfo directoryInfo)
    {
        _DirectoryInfo = directoryInfo;
        Type = EntryType.DirectoryInfo;
        Name = directoryInfo.Name;
    }

    public IEnumerable<Entry> Childs
    {
        get
        {
            if (Type != EntryType.DirectoryInfo
                || _DirectoryInfo == null)
            {
                throw new ArgumentNullException();
            }

            foreach (var directory in _DirectoryInfo.GetDirectories())
            {
                yield return new Entry(directory);
            }

            foreach (var file in _DirectoryInfo.GetFiles())
            {
                yield return new Entry(file);
            }
        }
    }

    public enum EntryType
    {
        None,
        FileInfo,
        DirectoryInfo
    }
}

Внимание * * 1004 Это не проверено, и на самом деле я не знаю, возникнут ли у вас проблемы с yield return new ....

0 голосов
/ 09 марта 2010

Вы можете сделать что-то вроде этого (синтаксис может быть немного, как я в основном кодирую в VB):

List<String> pathOfElements = new List<String>
IO.FileSystemInfo() elementsList = New IO.DirectoryInfo("C:\").GetFileSystemInfos() 
foreach element as FileSystemInfo in elementsList
pathOfElements.add(element.FullPath)
next

С помощью GetFileSystemInfos вы можете видеть как каталоги, так и файлы в заданном каталоге (дополнительно вы можете использовать GetFileSystemInfos(String) для получения файлов и подкаталогов, соответствующих указанным критериям поиска)

А для хранения информации о файлах и каталогах, если вы используете полный путь, все, что вам нужно, это список строк.

0 голосов
/ 09 марта 2010

Если вы хотите создать что-то иерархическое, вам нужно создать класс, которому принадлежит сам список.

class MyDirectory
-MyFile[] Files
-MyDirectory Parent
-MyDirectory[] SubDirectories
0 голосов
/ 09 марта 2010

.NET Framework уже включает в себя Directory / File и DirectoryInfo / FileInfo. Но если вам действительно нужно свернуть свой собственный, я бы предложил иметь объект с родителем, именем, каталогами (потомками) и файлами. Таким образом, вы можете легко перемещаться вверх и вниз по структуре.

...