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 :

Lire un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut Lire un fichier
    Bonjour, j'ai un problème apparement très simple, je me suis pris la tête toute la nuit dernière et aujourdh'ui sur ce truc, impossible de débloquer la situation donc je ne sais plus quoi faire, permettez-moi de vous soumettre la chose.

    Je souhaite tout simplement lire dans un fichier (de n'importe quel format), mettre ce que je lis dans un buffer de données de type char (typé ainsi que je pourrais lire octet par octet).
    Voici ma fonction :

    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
    char* fichier_lire_bloc(char *nom_fichier,int size)
    {  
           int f= open(nom_fichier, O_RDONLY);
          char *donnees=(char*)malloc(sizeof(char)*size);
     
         if(read(f, donnees, size) < 0)
         {
                perror("fichier_lire_bloc" );
                close(f);
                return -1;
         }*/
         printf(" sizeof(donnees) lire_bloc2 :  %d\n",(int)sizeof(donnees2));
         printf("voici les données \n %s \n",donnees2);
     
           close(f);
     
           return donnees;
    }
    Simple non ? le problème est qu'a l'affichage sur l'écran, je n'ai que 4 caractères d'écrit et si j'essaye d'écrire mon buffer dans un autre fichier (ce qui est mon but), sa ne m'écrit que ces quelques caractères.
    J'ai tout essayé, de déclarer mon buffer en static (char donnees[4096]), lire d'autres taille (je voudrais lire des blocs de 4096)...


    Auriez-vous une solution, y a t'il quelque chose qui vous saute aux yeux ? Je n'en peux plus de m'arracher les cheveux sur cette partie, je deviens fou
    Merci d'avance pour vos réponse

    EDIT : Precision je suis sous linux ubuntu

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par Xanax_Now Voir le message
    Bonjour, j'ai un problème apparement très simple, je me suis pris la tête toute la nuit dernière et aujourdh'ui sur ce truc, impossible de débloquer la situation donc je ne sais plus quoi faire, permettez-moi de vous soumettre la chose.

    Je souhaite tout simplement lire dans un fichier (de n'importe quel format), mettre ce que je lis dans un buffer de données de type char (typé ainsi que je pourrais lire octet par octet).
    Voici ma fonction :

    char* fichier_lire_bloc(char *nom_fichier,int size)
    {
    int f= open(nom_fichier, O_RDONLY);
    char *donnees=(char*)malloc(sizeof(char)*size);

    if(read(f, donnees, size) < 0)
    {
    perror("fichier_lire_bloc" );
    close(f);
    return -1;
    }*/
    printf(" sizeof(donnees) lire_bloc2 : %d\n",(int)sizeof(donnees2));
    printf("voici les données \n %s \n",donnees2);

    close(f);

    return donnees;
    }

    Simple non ? le problème est qu'a l'affichage sur l'écran, je n'ai que 4 caractères d'écrit et si j'essaye d'écrire mon buffer dans un autre fichier (ce qui est mon but), sa ne m'écrit que ces quelques caractères.
    J'ai tout essayé, de déclarer mon buffer en static (char donnees[4096]), lire d'autres taille (je voudrais lire des blocs de 4096)...


    Auriez-vous une solution, y a t'il quelque chose qui vous saute aux yeux ? Je n'en peux plus de m'arracher les cheveux sur cette partie, je deviens fou
    Merci d'avance pour vos réponse

    Travailles tu sous Linux ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut Précision OS
    Désolé pour la balise.
    Oui, je suis sous linux ubuntu mais je ne pense pas que cela change grand chose.

  4. #4
    Membre émérite Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Par défaut
    Je te propose de plutot utiliser les fonctions fopen(), fread(), fwrite() pour manipuler un fichier.

    Pour t'aider, je te fournis ce code sachant qu'il doit bien y avoir des optimisations à faire.
    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
    char* fichier_lire_bloc(char *nom_fichier,int size)
    {
       int iNbOctet = 0;
       char *donnees = malloc(size);
     
       FILE *f = fopen(nom_fichier, "r");
       if(f == NULL)
       {
          printf("Impossible d'ouvrir le fichier\n");
          return NULL;
       }
     
       iNbOctet = fread(donnees, 1, size, f);
       donnees[iNbOctet] = '\0';
     
       printf("Nombre d'octets lus:  %d\n",iNbOctet);
       printf("Les donnees lues:\n%s\n",donnees);
     
       close(f);
     
       return donnees;
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Merci, je vais tester sa

Discussions similaires

  1. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 14h26
  2. [MFC] lire un fichier en int
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 09h32
  3. Réponses: 5
    Dernier message: 11/01/2004, 20h17
  4. Lire un fichier de 50 gb
    Par Maryves dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2004, 14h08
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29

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