2 votes

Pourquoi la taille du fichier se répète-t-elle ?

J'essaie de lister les fichiers et leurs tailles dans le "premier" dossier mais j'obtiens une répétition bizarre d'un fichier sur deux.

#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

struct dirent *dirPtr;
struct stat st;

void main()
{
    DIR * dirp;
    if((dirp=opendir("first"))==NULL)
    {
        printf("There has been an error");
    }

    while(dirPtr=readdir(dirp))
    {
        printf("%s - ", dirPtr->d_name);
        stat(dirPtr->d_name, &st);  
        printf(" file size: %lu\n", st.st_size);
    }
    closedir(dirp);
}

Voici mon résultat :

enter image description here

Quelqu'un sait-il pourquoi cela se produit ?

2voto

paulsm4 Points 39422

Pour commencer, vous devriez probablement vérifier le résultat de retour de "stat()", et afficher un # d'erreur (au lieu de la taille du fichier) si stat() échoue.

Aussi : "opendir()" lit les fichiers depuis un répertoire arbitraire.

Q : Est-ce que "dirPtr->d_name" contient un chemin de fichier complet ... ou juste un nom de fichier ? En d'autres termes, essayez-vous de "stat()" à partir du mauvais répertoire ?

2voto

David Grayson Points 22459

En fait, vous appelez stat("test.c", &st) . Comment est stat censé savoir quel répertoire test.c est dedans ? Je ne pense pas que ce soit possible.

Je pense que tu devrais essayer de faire stat("./first/test.c", &st) o stat("/full/path/to/first/test.c", &st) . Mieux encore, vous devriez trouver une fonction comme stat qui prend un struct dirent comme argument, donc vous n'avez pas à vous soucier de la concaténation des chaînes de caractères.

Je vais voir s'il existe une telle fonction et modifier ma réponse si je la trouve.

1voto

Basile Starynkevitch Points 67055

Chaque répertoire a au moins deux entrées, le répertoire courant - un simple point . - et le répertoire parent - deux points ..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X