Тип данных дерева каталогов? - PullRequest
0 голосов
/ 24 сентября 2010

Каким будет тип возврата следующего метода? (T)

public T GetDirectoryContentsRecursively (string path) { ... }

Метод считывает содержимое каталога remote и считывает содержимое каждого подкаталога и каждого из подкаталогов этого объекта и т. Д.

Я думал об использовании List<object>, где object может быть другим List<object> и т. Д. ... но я не хочу, чтобы вызывающий абонент должен был бросать все в FileSystemInfo s каждый раз, когда он хочет используйте метод.

Каждый файл должен быть FileInfo, а каждый каталог - DirectoryInfo, оба они наследуют абстрактный класс FileSystemInfo.

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

Есть идеи? Нужно ли мне делать свой собственный DirectoryTree тип?

Редактировать: Данные должны быть получены с сервера, возможно, каталог за каталогом, по одному за раз. Что мне нужно сделать, это взять эти данные и преобразовать их в что-то , которое я могу передать пользователю. Это означает, что я не могу просто передать DirectoryInfo, а затем вызвать его GetFileSystemInfos(), потому что Каталог не будет существовать на локальном компьютере.

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

Я думаю, что, возможно, подход неправильный, чего вы пытаетесь достичь с помощью древовидной структуры, которую вы не можете использовать с помощью каталога API, как и когда вам нужно?

Если вы хотите просто просмотреть структуру папок / файлов в удаленном каталоге, вам не нужно создавать собственное представление в памяти для этого. Если вы визуализируете структуру, просто возьмите верхний уровень и загрузите другие уровни по требованию.

Если вы действительно хотите пойти по этому пути, тогда вы можете просто вернуть IEnumerable<string> со всеми путями каталогов и файлов. DirectoryInfo и FileInfo - относительно дорогие объекты. Все зависит от цели, можете ли вы дать больше информации?

1 голос
/ 24 сентября 2010

см. Ниже информацию о SortedSet, если вы используете .net 4.0

http://msdn.microsoft.com/en-us/library/dd412070.aspx

и Directory.Enumarate в .net 4.0 предназначен для выполняемой задачи.

0 голосов
/ 24 сентября 2010

Попробуйте что-то вроде этого:

class MySweetObject {
HashSet fileInfoSet;
HashSet directoryInfoSet;
// Логика, необходимая для манипулирования файлами по своему усмотрению
// Логика необходима для доступа к файлам по вашему усмотрению
}

Тогда напишите это как:

public MySweetObject GetDirectoryContentsRecursively (путь строки) {...}

Создайте пользовательский объект и передайте его вызывающей стороне.

...