0
votes

J'ai besoin d'aide pour coder un programme qui passe par des annuaires, montre les fichiers et dit combien et quelles extensions il y a

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); 
    }
} 


0 commentaires

3 Réponses :


0
votes

Vous pouvez maintenant utiliser le numéro de tous les fichiers 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.

Cela pourrait ressembler à quelque chose comme: xxx


0 commentaires

0
votes

Actuellement, vous obtenez une liste de fichiers dans le répertoire actuel, puis obtenez le nombre de fichiers immédiatement après xxx pré>

à aucun point, vous regroupez les fichiers ensemble par extension ou en réinitialisant cette Résultat de sorte que lorsque vous bouclez à travers tous les fichiers forts>, vous imprimerez une ligne par fichier et utiliserez le résultat trouvé au début qui ne changera jamais. p>

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); 
    }
} 


1 commentaires

Merci pour votre réponse, cela facilite la tâche :)



1
votes

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());
}


1 commentaires

Ouah merci! Grande instruction, je vais certainement m'aider! :)