Je dois coder un programme qui itière à travers des répertoires et imprime le type des extensions et le nombre de ceux-ci dans ce dossier. Par exemple:
Il y a un dossier appelé "public". Dans ce dossier, il y a 2 autres dossiers appelés "2015" et "2017" et un ".txt" -file. Dans "2015", il y a 2 pdf, un txt et 3 docx. P>
Je suis un noob total (comme vous le verrez probablement bientôt) mais je suis curieux de la résoudre avec des dictionnaires. p>
1st, j'ai essayé le code suivant, mais la sortie et le code ne sont pas comme si elles devraient être (donc je vais probablement supprimer le code) p>
2e, je devrais le résoudre avec " Dictionnaire ", mais je n'ai jamais entendu parler d'eux et je ne sais pas ce qu'ils sont et comment je les utilise, bien que j'ai déjà essayé de les comprendre. Mon professeur a dit que nous devrions travailler avec le dictionnaire [Extensions]; Si l'extension existe déjà, nous devrions "dictionnaire [extensions] ++;" et si une nouvelle extension "apparaît", nous devrions l'ajouter à un autre tableau. P>
Voici ce que j'ai essayé: p>
Main: P>
public static void readDir(string currentDirectory) { string extension = " "; string[] rootSub = Directory.GetDirectories(currentDirectory); string[] files = Directory.GetFiles(currentDirectory); int result = files.GetLength(0); Console.WriteLine(currentDirectory); foreach (var item in files) { extension = Path.GetExtension(item); Console.WriteLine("{0} Files with Extension {1}", result, extension); } Console.WriteLine(); foreach(string dir in rootSub) { readDir(dir); } }
3 Réponses :
Vous pouvez maintenant utiliser le numéro de tous les fichiers em> dans le répertoire. Pour obtenir le numéro par extension, une solution est d'utiliser un dictionnaire avec l'extension sous forme de touches et comptez chaque apparition d'une extension tout en itérant sur les fichiers. Vous pouvez également vouloir définir l'extension à la baisse (ou supérieure) afin que différents cas n'entraînent pas différentes extensions. P> Cela pourrait ressembler à quelque chose comme: p>
Actuellement, vous obtenez une liste de fichiers dans le répertoire actuel, puis obtenez le nombre de fichiers immédiatement après à aucun point, vous regroupez les fichiers ensemble par extension ou en réinitialisant cette Résultat de sorte que lorsque vous bouclez à travers vous voulez probablement faire Utilisez une partie de ce LINQ que vous avez trouvé précédemment pour modifier légèrement la méthode. P> public static void readDir(string currentDirectory)
{
string extension = " ";
string[] rootSub = Directory.GetDirectories(currentDirectory);
string[] files = Directory.GetFiles(currentDirectory);
// This will be an IEnumerable<IGrouping<string, string>> where they key is the extension and the "value" is every file for that extension
IEnumerable<IGrouping<string, string>> filesGroupedByExtension = files.GroupBy(file => Path.GetExtension(file));
foreach (IGrouping<string, string> groupedFiles in filesGroupedByExtension)
{
Console.WriteLine($"{groupedFiles.Count()} Files with Extension {groupedFiles.Key}");
}
Console.WriteLine();
foreach(string dir in rootSub)
{
readDir(dir);
}
}
Merci pour votre réponse, cela facilite la tâche :)
Vous pouvez obtenir une liste de tous les fichiers à l'intérieur d'un répertoire, y compris des sous-répertoires, Acheter Suing répertoire.enumerateFiles () code>.
var files = Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories);
var groups = files.GroupBy(x => Path.GetExtension(x));
Dictionary<string, int> ExtensionCount = new Dictionary<string, int>();
foreach(var group in groups)
{
ExtensionCount.Add(group.Key, group.Count());
}
Ouah merci! Grande instruction, je vais certainement m'aider! :)