Information

Author(s) Victor Rijks Anthony Doeraene
Deadline No deadline
Submission limit No limitation

Tags

Sign in

File Analyzer

Pour la prochaine version de Windows, Microsoft voudrait offrir une interface qui permet de facilement connaitre la composition d'un dossier spécifique. Plus particulièrement cette interface informerait l'utilisateur sur la quantité de fichiers de chaque extension et de la taille totale que prennent ces fichiers.

Vous êtes chargé de développer un prototype de cette fonctionnalité en C. Vous devez programmer une fonction "fileAnalyzer" qui prend en argument un élément de type struct FilesStream * et qui renvoie un résumé des fichiers sous le format struct Output *. Ces deux structures sont expliquées plus en détails plus bas.

Votre prototype reçoit les fichiers présents dans un dossier sous forme d'une liste chaînée. Le premier élément est lié au second, le second au troisième, etc. Le dernier élément est reconnaissable car il est lié à NULL.

Vous pouvez vous attendre à une liste chaînée vide ou à l'opposé très grande. Cependant, le nombre d'extensions maximales que vous pouvez trouver dans un dossier est de 10 extensions différentes.

Comme expliqué précédemment, vous recevez en argument une liste chaînée, chaque node est défini ainsi:

struct FilesStream {
   char *filename;
   char *extension;
   int  size;
   struct FilesStream *next;
};

Votre fonction doit retourner un pointeur vers la première struct Output, en tout vous devez avoir 10 struct Output qui se suivent dans la mémoire. Une struct Output est définie comme telle:

struct Output {
   char *extension;
   int  number;
   int  totalSize;
};

Si jamais il y a moins de 10 extensions différents, les struct Output non utilisées doivent être initialisées comme tel:

  1. extension == NULL
  2. number== 0
  3. totalSize == 0
L'ordre des struct Output doit être le même que l'apparition des extensions dans la liste chaînée (l'extension de la première node doit être la première dans les struct Output).

Exemples d'utilisation

  • Avec les 3 fichiers suivant:
    1. image001.png d'une taille de 1460
    2. Photoshop.exe d'une taille de 76
    3. image002.png d'une taille de 798
  • La deux premiers "struct Output" contiennent:
    • extension: png
    • number: 2
    • totalSize: 2258
    • extension: exe
    • number: 1
    • totalSize: 76
  • Les huit prochaines "struct Output" sont toutes comme tel:
    • extension: NULL
    • number: 0
    • totalSize: 0

Question
/*
 *@pre maximum de 10 extensions différentes
 *@post retourne l'adresse mémoire de la première structure "Output" suivie des autres structures "Output" contenant chacune:
 *   1) l'extension (char *)
 *   2) le nombre de fichiers ayant cette extension (int)
 *   3) la taille totale des fichiers ayant cette extension (int)
 * /!\ l'ordre des structures "Output" DOIT être le même que l'ordre d'apparition des extensions dans la liste chainée
 * /!\ il doit y avoir 10 structures "Output"
 */
struct Output * fileAnalyzer(struct FilesStream *FS){