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 et écrire dans un fichier bin!


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut Lire et écrire dans un fichier bin!
    J'aimerai ouvrir un fichier bin, pour ensuite enregistré un liste chaîné à l'intérieur de ce fichier.
    J'aimerai aussi, mettre en mémoire la liste chainée qui se trouve sur un fichier bin. Ce qui me permetterai de travailler sur cette liste chaînée et lorsque je fermerai le programme, la liste chaînée s'enregisterai sur le fichier bin.
    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Pourquoi désires-tu enregistrer les noeuds de ta liste chaînée dans un fichier binaire. Je te rends attentif au fait que cette pratique peut poser de grands problèmes de portabilité. Un manière relativement portable de stocker une structure dans un fichier est de la stocker dans un fichier texte au format CSV (Comma Separated Values). Il existe également des techniques pour stocker une structure dans un fichier binaire de manière portable. Pour en savoir plus à ce sujet: http://emmanuel-delahaye.developpez....m#enreg_struct

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut problème
    peux tu m'envoyer un petit exemple de programme avec les listes chaînées en utilisant le fichier *.bin STP. Car sa ma l'air bien compliqué!!!

  4. #4
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par poche
    peux tu m'envoyer un petit exemple de programme avec les listes chaînées en utilisant le fichier *.bin STP. Car sa ma l'air bien compliqué!!!
    Il y a un exemple d'enregistrement naïf d'une structure dans un fichier binaire dans le lien que je t'ai passé. L'as-tu lu? N'hésites pas à poser des questions précises sur ce que tu ne comprends pas.

    Je n'ai malheureusement pas le temps d'écrire un exemple qui implante une liste chaînée ainsi que son gestionnaire de sauvegarde dans un fichier binaire maintenant. Mais le principe est le même que celui présenté sur le lien (chaque noeud de ta liste est représenté en mémoire par une structure, et ce sont ces noeuds que tu désires enregistrer), avec les même dangers.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Oui mais le problème, c'est que l'exemple est avec un fichier texte et non bin. Sa marche pareil? Par contre, je comprend pas les dangers que sa représente!!!

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par poche
    Oui mais le problème, c'est que l'exemple est avec un fichier texte et non bin. Sa marche pareil? Par contre, je comprend pas les dangers que sa représente!!!
    Non, l'exemple utilise un fichier binaire. Qu'est-ce qui te fait dire le contraire? Ci-dessous, code écrit par Emmanuel Delahaye (http://emmanuel-delahaye.developpez....m#enreg_struct):
    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 <stdio.h>
     
    struct data
    {
       char nom[32];
       int age;
    };
     
    int main (void)
    {
    #define FNAME "data.txt"
     
       struct data data = { "Emmanuel", 50 };
     
       FILE *fp = fopen (FNAME, "wb");
       if (fp != NULL)
       {
          fwrite (&data, sizeof data, 1, fp);
     
          fclose (fp), fp = NULL;
       }
       else
       {
          perror (FNAME);
       }
       return 0;
    }
    L'utilisation de fopen() avec le mode "wb" te permet d'ouvrir un fichier binaire en écriture. Voir: http://man.developpez.com/man3/fopen.3.php

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Vous ouvrez bien un fichier texte et non binaire!!!
    Mais pour enregistrer toute une liste chaînée, je vois pa comment faire!!
    Je dois écrire exactement pareil pour enregistrer une liste chaînée que pour un maillon?
    Et si je veux lire ce qu'il y a dans le fichier et le mettre en mémoire ( toujours en listes chaînées....), comment dois je faire?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par poche
    J'aimerai ouvrir un fichier bin, pour ensuite enregistré un liste chaîné à l'intérieur de ce fichier.
    J'aimerai aussi, mettre en mémoire la liste chainée qui se trouve sur un fichier bin. Ce qui me permetterai de travailler sur cette liste chaînée et lorsque je fermerai le programme, la liste chaînée s'enregisterai sur le fichier bin.
    Merci d'avance.
    Bien que ce soit techniquement possible, il n'y a aucun intérêt à enregistrer une liste chainée dans un fichier. En effet, les adresses ne sont pas portables et n'auront aucun sens à la relecture du code. C'est le cas pour toutes les structures non linéaires (donc, avec pointeurs)

    Par contre, une liste chainée étant une séquence de noeuds comprenant des données, on peut tout à fait enregistrer la séquence de données dans un fichier (texte de préférence, c'est plus portable), et ensuite refabriquer la liste chainée à la lecture à partir des données lues.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    Vous pourriez pas m'envoyer un ptit bout de programme pr faire cela car je suis à la ramasse!!!!
    Merci d'avance

  10. #10
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Sous linux, il n'y a pas de distinction entre un fichier texte et un fichier binaire au niveau de l'ouverture. C'est le sens qu'on donne à son contenu qui fait la différence.

    Sous Windows, le code de l'exemple ci-dessus ouvre un fichier binaire et écrit les donnée d'une structure de type struct data sous forme binaire. Cela correspond à la façon de faire naïve, et ce n'est pas portable (problèmes d'endianess, de contraintes d'alignement, du jeu de caractère utilisé pour la chaîne de caractère, etc.).

    A moins qu'il s'agisse de contraintes liées à un exercice scolaire, je ne comprend pas pourquoi tu désires enregistrer ta liste chaînée de cette manière dans un fichier binaire...

    Citation Envoyé par poche
    Je dois écrire exactement pareil pour enregistrer une liste chaînée que pour un maillon?
    Une fois ton fichier ouvert, tu répètes l'opération d'écriture pour chaque maillon de ta liste. Puis tu fermes le fichier une fois l'opération terminée.

    Citation Envoyé par poche
    Et si je veux lire ce qu'il y a dans le fichier et le mettre en mémoire ( toujours en listes chaînées....), comment dois je faire?
    Tu ouvres le fichier en mode "lecture de fichier binaire" i.e. "rb", et tu utilises la fonction fread() pour la lecture. Lis attentivement la doc: http://man.developpez.com/man3/fread.3.php

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. lire et écrire dans un fichier
    Par aroua dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 04/04/2008, 14h44
  2. Lire et écrire dans un fichier binaire
    Par poche dans le forum C
    Réponses: 17
    Dernier message: 19/03/2007, 16h52
  3. lire et écrire dans un fichier
    Par karel dans le forum C
    Réponses: 15
    Dernier message: 18/01/2006, 17h24
  4. [FTP] Lire et écrire dans un fichier
    Par dj-julio dans le forum Langage
    Réponses: 49
    Dernier message: 12/01/2006, 11h59
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

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