2010-09-24 18 views
0

Quel serait le type de retour de la méthode suivante? (T)Type de données d'arborescence de répertoire?

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

La méthode va lire le contenu d'un répertoire distant , et lire le contenu de chaque sous-répertoire et chacun des sous-répertoires de cet objet et ainsi de suite.

J'ai pensé à utiliser List<object>, où object pourrait être un autre List<object> etc ... mais je ne veux pas l'appelant d'avoir à être coulée tout en FileSystemInfo de chaque fois qu'ils veulent utiliser la méthode.

Chaque fichier doit être un FileInfo et chaque répertoire un DirectoryInfo, tous deux héritant de la classe abstraite FileSystemInfo.

Je n'arrive pas à comprendre quel type de données est le mieux utilisé pour représenter cela.

Des idées? Ai-je besoin de créer mon propre type DirectoryTree?

Modifier: Les données doivent être extraites d'un serveur, probablement un répertoire par répertoire, une à la fois. Ce que je dois faire est de prendre ces données et de les reconstruire en quelque chose que je peux passer à l'utilisateur. Cela signifie que je ne peux pas simplement passer un DirectoryInfo, puis appeler son GetFileSystemInfos() parce que le répertoire n'existera pas sur la machine locale.

Répondre

1

Je pense que peut-être l'approche est fausse, qu'essayez-vous d'atteindre avec une structure arborescente que vous ne pouvez pas en utilisant le répertoire APIs comme et quand vous en avez besoin?

Si l'intention est simplement de parcourir la structure de dossiers/fichiers sur le répertoire distant, vous n'avez pas besoin de créer votre propre représentation en mémoire pour cela. Si vous restituez la structure, saisissez simplement le niveau supérieur et chargez les autres niveaux à la demande.

Si vous voulez vraiment suivre cette route, vous pouvez simplement retourner IEnumerable<string> avec tous les chemins de répertoires et de fichiers. DirectoryInfo et FileInfo sont des objets relativement coûteux. Tout dépend du but, pouvez-vous donner plus d'informations?

+0

Je ne peux pas retourner un 'IEnumerable ' parce que je veux transmettre d'autres informations telles que la taille de chaque fichier, quand il a été modifié etc ... Peut-être que vous avez raison avec votre deuxième paragraphe et que je ne fais pas t besoin de cette méthode du tout. J'ai déjà 'public IEnumerable GetDirectoryContents (chemin de chaîne)'. – Nobody

+0

Je suppose que ce que je pensais c'est qu'une fois que vous avez une liste de chemins de fichiers, vous pouvez utiliser les API 'File' et' Directory' pour rechercher la taille et les informations d'attribut au fur et à mesure que vous en avez besoin. Encore une fois cela dépend du but. – TheCodeKing

0

Essayez quelque chose comme ceci:

classe MySweetObject {
HashSet fileInfoSet;
HashSet directoryInfoSet;
// Logic nécessaire pour manipuler des fichiers comme bon vous semble
// Logic nécessaire pour accéder à des fichiers comme bon vous semble
}

écrire ensuite comme:

publique MySweetObject GetDirectoryContentsRecursively (chemin de chaîne) {...}

Créez un objet personnalisé et transmettez-le à l'appelant.

+0

une raison particulière pour le downvote? – Woot4Moo