Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calculer le nombre d'octet d'un fichier txt

Presque parfait...

    29 décembre 2005 à 15:29:39

    Salut !
    J'ai fait un petit programme qui calcule le nombre d'octets d'un fichier txt (le nombre de caractères).
    Il demande de rentrer l'adresse du fichier, si on rentre une adresse valide ca marche très bien, mais si on en rentre une fausse ca plante, j'ai entendu parler des "exceptions" qui permettrait de regler ca..
    Bon en attendant je vous montre le code source :
    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    FILE *fichier;
    int compteur=0;
    char adresse[45];
    printf("Veuillez tapez l'adresse du fichier txt :\n\n");
    gets(adresse); //On recupere l'adresse
    fichier = fopen(adresse,"r"); //r signifie qu'on ouvre le fichier en lecture seule.

    /*Tant que la boucle n'arrive paas a EOF (ascii signifiant la fin du fichier)
    On incremente le compteur*/

    while(getc(fichier)!=EOF)compteur++;
    fclose(fichier); //On ferme le fichier

    printf("\nVotre fichier pese : %d Octets\n",compteur); //On affiche le resultat

    printf("\nAppuyez sur une touche pour fermez le programme..");
    getchar();

    }




    Edit : Bon voila j'ai trouvé, il suffit juste de rajouter un if(fichier == NULL)
    Voila le code corrigé :
    #include <stdio.h>
    #include <conio.h>

    int main()
    {
    FILE *fichier;
    int compteur=0;
    char adresse[45];

    printf("Veuillez tapez l'adresse du fichier txt :\n\n");
    gets(adresse); //On recupere l'adresse
    fichier = fopen(adresse,"r"); //r signifie qu'on ouvre le fichier en lecture seule.
    if (fichier == NULL)
    {
                printf("\nErreur ! ce fichier n'existe pas !!\n");
                }
                else
                {
    /*Tant que la boucle n'arrive paas a EOF (ascii signifiant la fin du fichier)
    On incremente le compteur*/

    while(getc(fichier)!=EOF)compteur++;
    fclose(fichier); //On ferme le fichier

    printf("\nVotre fichier pese : %d Octets\n",compteur); //On affiche le resultat
    }
    printf("\nAppuyez sur une touche pour fermez le programme..");
    getchar();

    }
    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2005 à 21:51:36

      Tu peux aussi utiliser la fonction fseek pour aller a la fin du fichier et ftell pour connaitre ta position... qui du coup correspond a la taille du fichier.
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2005 à 23:07:49

        et aussi utiliser "rb" au lieu de "r" pour une lecture binaire.
        enutilisant fseek et ftell
        long filesize(FILE *stream) {
        /* Renvoie la position du dernier octets du flot stream */

        long curpos,length;

        curpos = ftell(stream); /* garder la position courante */
        fseek(stream, 0L, SEEK_END);
        length = ftell(stream);
        fseek (stream, curpos, SEEK_SET); /* restituer la position */
        return length;
        }

        car avec ton code il m'a fallut bien 20/25 sec pour un fichier de 425Mo alors qu'avec la fonction filesize, seulement 1/10 de sec.
        • Partager sur Facebook
        • Partager sur Twitter
          30 décembre 2005 à 13:12:19

          Ok merci, j'essayerais des que j'ai le temps..
          Sinon tu as beaucoup de fichier txt de 450 Mo ?! o_O
          • Partager sur Facebook
          • Partager sur Twitter
            30 décembre 2005 à 15:35:22

            Mais qui t'a dit que c'etait seulement pour les txt ^^
            Ton code permet d'ouvrir de tout :)
            • Partager sur Facebook
            • Partager sur Twitter
              30 décembre 2005 à 16:06:32

              minirop> dans fseek le "0L" c'est uniquement pour le style ou ca sert vraiment à qqchose (j'ai toujours fait avec un 0 signé et ca n'a jamais posé de problème )
              • Partager sur Facebook
              • Partager sur Twitter

              Calculer le nombre d'octet d'un fichier txt

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown