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 :

[FILE] différence de taille de fichier


Sujet :

C

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut [FILE] différence de taille de fichier
    Bonjour,

    je suis en train de débuter en C et pour un programme de lecture de fichier, je dois savoir la taille d'un fichier pour un futur calcule. J'ai fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int file_length(FILE *f){
    	int pos;
    	int end;
    	pos = ftell (f);
    	fseek (f, 0, SEEK_END);
    	end = ftell (f);
    	fseek (f, pos, SEEK_SET);
    	return end;
    }
    et pour le print je fais simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int filesize = file_length(fichier);
     
    	printf("file size = %i\n",filesize);
    D'après ce que j'ai pu lire, la valeur retournée est en Byte. Cependant j'obtiens une valeur différente que si je regarde la taille de mon fichier en faisant un clic droit sur le fichier.Je précise que je suis sous Linux 12.04 64 bits

    merci de votre précieuse aide

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Il faut savoir que les fichiers sont stockés dans le disque dur dans des secteurs de taille fixe.

    Or, il ne peut y avoir qu'un seul fichier par secteur, la taille du fichier sera donc le nombre de secteur nécessaires pour le stocké arrondit à l'entier supérieur.

    Donc si un fichier nécessite d'avoir 3,25 secteur, il aura la taille de 4 secteurs.


    Or avec fseek, on se place sur le dernier octet du fichier et non sur le dernier octet du dernier secteur.


    Ceci devrait t'intéresser :
    http://man.developpez.com/man2/stat.2.php

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    et si j'ai pas de disque dur mais 1 SSD sa change ? lol

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je n'ai pas tout lu, mais il me semble qu'il y a tout de même un arrondit :

    http://www.infobidouille.com/article...d#.T6y0L8VvD_c

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    j'ai aussi lu qu'on pouvais récupérer la taille d'un fichier avec sys/stat.h est-ce que sa serai plus simple ?

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Plus simple, peut être plus rapide aussi.

    J'avais édité un de mes posts pour mettre un lien vers le man de stat.h mais comme tu as posté juste avant que je valide l'édition, tu n'as pas dû le voir.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    ce qui est étrange ce que j'ai toujours des différences. avec fstat j'obtiens une valeur de 11,419,115,52 bytes alors que si je regarde les propriétés du fichier j'ai 10,240,000,000 bytes. j'avoue que j'ai de la peine à comprendre la...

    en plus si j'essaie avec stat, j'obtiens 16,500,654,08.....

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    en fait mon fichier et plus gros que 4 GB et il me semble qu'il faut utiliser stat64 mais j'ai une erreur a la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct stat64 mystat, buff;
    	fstat64(fileName,buff);
    	int size = buff.st_size;
    et l'erreur la voici

    Building file: ../readFile.c
    Invoking: GCC C Compiler
    gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"readFile.d" -MT"readFile.d" -o "readFile.o" "../readFile.c"
    ../readFile.c: In function ‘main’:
    ../readFile.c:17:16: error: storage size of ‘mystat’ isn’t known
    ../readFile.c:17:24: error: storage size of ‘buff’ isn’t known
    merci de me donner un coup de main

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    bon j'ai réussi à avoir des résultats cohérents. pouvez-vous jeter un coup d'oeil a mon code et me dire les choses à améliorer ou qui pourraient poser problème ? merci

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <sys/stat.h>
     
     
    int main(int argc, char *argv[])
    {
    	//File to read
        FILE* fichierR = NULL;
    	char* fileNameR = "./file.txt";
     
    	//Useful to get the file size
    	struct stat buf;
    	stat(fileNameR, &buf);
    	float size = buf.st_size;
    	printf("file size = %.0f bytes\n",size);
     
    	char buffer[8192]; //8Ko of buffer
    	int v = 0;
    	struct timeval  tv1, tv2;
    	float duration, readSpeed;
     
    	//open read only
    	fichierR = fopen(fileNameR,"r");
     
    	if(fichierR != NULL){
    		gettimeofday(&tv1, NULL); //get the current time
    		do{
    			//read 8191 bytes of the file and store them into buffer
    			v = fread(buffer, 1, 8191, fichierR);
    		}while(v != 0);
     
    		gettimeofday(&tv2, NULL);
     
    		//Compute the time to read the file
    		duration = (float) (tv2.tv_usec - tv1.tv_usec)/1000000 + (float) (tv2.tv_sec - tv1.tv_sec);
     
    		//Compute the read speed
    		readSpeed = (size*8)/duration;
     
    		printf ("Read time = %.15f seconds\n", duration);
    		printf ("Read speed = %f Gb/s\n", readSpeed/1000000000);
     
    	}else{
    		printf("Error during opening file %s\n",fileNameR);
    	}
     
    	fclose(fichierR);
        return 0;
    }

Discussions similaires

  1. input type="file" et taille des fichiers
    Par voyageurdumonde dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/06/2012, 19h25
  2. Réponses: 14
    Dernier message: 28/08/2008, 19h27
  3. <html:file> taille du fichier
    Par youcef81 dans le forum Struts 1
    Réponses: 1
    Dernier message: 04/08/2008, 11h33
  4. Lecture fichier via url ou file, différence ?
    Par kij dans le forum Entrée/Sortie
    Réponses: 28
    Dernier message: 03/01/2007, 13h30
  5. Réponses: 4
    Dernier message: 08/09/2006, 11h21

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