IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calcule de la taille d'un fichier texte avec langage C


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Calcule de la taille d'un fichier texte avec langage C
    Bonjour, je suis sous Win7 et je travaille avec Dev-C++,
    Je souhaiterai calculer la taille d'un fichier .txt nommé text à l'aide du programme en C ci-dessous (le prgC et le fichier sont dans le même dossier).
    Le programme se compile et renvoie TAILLE : -1 au lieu de la vrai taille du fichier (4 096 octets),
    Si j’enlève ("main.c") à la fin du programme il me renvoie TAILLE : 4199056
    qlqn pourrait-il me dire quelle est l'erreur dans ce programme
    merci d’avance
    ------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    long file_size(char *text)
    {
       /*Ouverture du fichier*/
       FILE *file = fopen(text, "r");
       long ret;
       if(file == NULL)
       {
          return -1;
       }
       /*On place le curseur à la fin*/
       fseek(file, 0, SEEK_END);
       /*On récupére la position courante*/
       ret = ftell(file);
       fclose(file);
       return ret;
    }
    int main(int argc, char *argv[])
    {
      printf("TAILLE : %ld\n", file_size("main.c"));
      Sleep(2000);
      return 0;
    }

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    d'abord si tu pouvais mettre ton code entre balises [CODE][/CODE] ça permettrait une meilleure lisibilité (sur l'interface c'est le bouton dièse '#')

    ensuite si ton programme affiche TAILLE = -1, ça veut dire que ret vaut -1, et donc que c'est le retour de ftell qui vaut -1

    la manpage (http://man.developpez.com/man3/fseek/) dit ceci :
    Si elles réussissent totalement, fgetpos(), fseek(), fsetpos() renvoient 0, et ftell() renvoie la position actuelle. Sinon, elles renvoient -1 et la variable globale errno contient le code d'erreur.
    en modifiant un peu ton code tu pourras donc y voir plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (...)
    #include <string.h>
    #include <errno.h>
    (...)
    ret = ftell(file);
    if (ret == -1) {
       printf ("%s\n", strerror(errno));
       return -1;
    }
    (...)

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    en supprimant les lines 11 à 14, ca me donne:

    Invalid Argument
    TAILLE : -1



    Est ce qu'il y aurait un autre algorithme en C qui permet de calculer la taille d'un fichier ?

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par qwerty_213 Voir le message
    en supprimant les lines 11 à 14

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Est ce qu'il y aurait un autre algorithme en C qui permet de calculer la taille d'un fichier ?
    1er lien google
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 18
    Points : 35
    Points
    35
    Par défaut
    bonjour,

    Citation Envoyé par qwerty_213 Voir le message
    Est ce qu'il y aurait un autre algorithme en C qui permet de calculer la taille d'un fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <fcntl.h>
    #include <io.h>
     
    int handle;
    long ret;
     
    handle = open ( "text.txt" , O_RDONLY );
    ret = lseek ( handle , 0, SEEK_END );
    close ( handle );
    tu récupère la taille dans la variable ret

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Pourquoi aller si loin quand la donne la réponse ?
    ---> http://c.developpez.com/faq/?page=Le...e-d-un-fichier

    Si l'ouverture du fichier ne fonctionne pas, il faut se demander si le chemin vers le fichier à ouvrir est bon. En particulier, si le chemin est relatif, quel est le dossier courant quand l'exécutable se lance ?

  8. #8
    Membre du Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    finalement l’erreur dans le programme été de déclarer le fichier entre guillemet et avec son extension, dans la fonction fopen.

    la taille s'affiche en octets

    merci à tous

  9. #9
    Invité
    Invité(e)
    Par défaut
    int taille;
    int fd;

    fd = open("path", O_RDWR);
    taille = lseek(fd, 0, SEEK_END);
    lseek(fd, 0, SEEK_SET);
    printf("File size = %d\n", taille);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Taille d'un fichier texte
    Par tupac25 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 26/10/2010, 10h51
  2. [JPEG] Compression & calcul de la taille physique du fichier
    Par JYves dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 17/12/2008, 16h41
  3. Réponses: 13
    Dernier message: 22/01/2008, 15h25
  4. Imprimer un fichier texte avec un script vbs
    Par Persons dans le forum Windows
    Réponses: 3
    Dernier message: 23/12/2004, 16h47
  5. Decoupage d'un fichier texte avec cut
    Par tesla dans le forum Linux
    Réponses: 3
    Dernier message: 28/06/2004, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo