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 :

Modifier un fichier.bin


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut Modifier un fichier.bin
    Bonjour,
    J'ai cherché toute la nuit la solution pour modifier la valeur d'une structure d'un fichier.bin . Il semblerais que ce ne soit pas si facile...
    Les fonctions d'ouverture si je ne me trompe pas ne permettent que d'écrire à la fin du fichier.
    La fonction fseek peut elle etre utilisé pour se placer au bon endroit pour l'écriture?

    Je souhaite modifier un int stocké dans une structure elle meme stockée dans un .bin , mais je n'ai toujours pas réussi, il serait étonnant que le C ne permette pas de modifier un .bin.

    Merci de votre aide! Je vais faire dodo après cette nuit de recherche infructueuse. J'espère avoir une bonne surprise demain matin

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut,

    Le C ne sait pas faire la différence entre un fichier .bin, .iso, .exe, .com, .zip, etc : un fichier est un fichier.
    A partir de là, tu peux ouvrir n'importe quel type de fichier en C, en lecture, en écriture, en lecture et en écriture, etc. Modifier un .bin est tout aussi possible que de modifier n'importe quel type de fichier.

    En fait, je ne comprends pas réellement ce que tu veux faire ni pourquoi, sachant qu'un .bin est un fichier image CD/DVD. Que tu veuilles à la rigueur modifier un fichier exécutable, je pourrais comprendre. Mais un fichier image CD/DVD, euh... ? Après, s'il s'agit de modifier effectivement un fichier spécifique dans l'image, il faut encore savoir où aller dedans et comment s'y prendre, et pour cela il faut posséder la doc de ce format (qui est, je crois, propriétaire (?)).

    Si tu sais réellement quoi changer dedans et s'il ne s'agit que d'une valeur, un simple éditeur hexa peut sinon faire parfaitement l'affaire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Salut,

    Le C ne sait pas faire la différence entre un fichier .bin, .iso, .exe, .com, .zip, etc : un fichier est un fichier.
    A partir de là, tu peux ouvrir n'importe quel type de fichier en C, en lecture, en écriture, en lecture et en écriture, etc. Modifier un .bin est tout aussi possible que de modifier n'importe quel type de fichier.

    En fait, je ne comprends pas réellement ce que tu veux faire ni pourquoi, sachant qu'un .bin est un fichier image CD/DVD. Que tu veuilles à la rigueur modifier un fichier exécutable, je pourrais comprendre. Mais un fichier image CD/DVD, euh... ? Après, s'il s'agit de modifier effectivement un fichier spécifique dans l'image, il faut encore savoir où aller dedans et comment s'y prendre, et pour cela il faut posséder la doc de ce format (qui est, je crois, propriétaire (?)).

    Si tu sais réellement quoi changer dedans et s'il ne s'agit que d'une valeur, un simple éditeur hexa peut sinon faire parfaitement l'affaire.
    Je me suis mal expliqué (a cause de l'heure surement)

    Je souhaite modifier un fichier.bin dans mon code C.J'ai moi meme rempli le fichier .bin (donc je connais sa structure) J'ai donc un probleme de programmation.
    Je pensais cela un peu comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            fc=fopen("Fichier.bin","a+");
            if (fc == NULL)
                return -1;
            fseek(fc, lenFc* posfc, 0) 
            rep=fwrite(&(cl.nbvenue) , sizeof(int), 1, fc) ;
    Se code écrit à la fin du fichier et ce meme avec le fseek.
    Je souhaiterais écraser la valeur nbvenue.

    nbvenue est le premier élément de ma structure.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Voici les different mode d'ouverture:
    "r"
    ouverture d'un fichier texte en lecture.
    "w"
    ouverture d'un fichier texte en écriture.
    "a"
    ouverture d'un fichier texte en écriture à la fin.
    "rb"
    ouverture d'un fichier binaire en lecture.
    "wb"
    ouverture d'un fichier binaire en écriture.
    "ab"
    ouverture d'un fichier binaire en écriture à la fin.
    "r+"
    ouverture d'un fichier texte en lecture/écriture.
    "w+"
    ouverture d'un fichier texte en lecture/écriture.
    "a+"
    ouverture d'un fichier texte en lecture/écriture à la fin.
    "r+b" ou "rb+
    ouverture d'un fichier binaire en lecture/écriture.
    "w+b" ou "wb+
    ouverture d'un fichier binaire en lecture/écriture.
    "a+b" ou "ab+
    ouverture d'un fichier binaire en lecture/écriture à la fin.
    Les mode qui ne parlent pas d'écriture à la fin supprime tout le contenu du .bin avant l'écriture. Que faire?

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Neotaxi Voir le message
    Les mode qui ne parlent pas d'écriture à la fin supprime tout le contenu du .bin avant l'écriture. Que faire?
    Non, r+b n'efface pas le fichier (par contre si le fichier n'existe pas, il n'est pas créé).

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Il faut effectivement ouvrir le fichier en mode "r+b" :
    r+
    Ouvre le fichier en lecture et écriture. Le pointeur de flux est placé au début du fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rep=fwrite(&(cl.nbvenue) , sizeof(int), 1, fc) ;
    Attention, ceci n'est pas portable et peut donc poser des problèmes (si tu changes de machine), à cause :
    1 ) de la taille du int, qui peut varier selon la machine. Le C n'impose pas de taille spécifique mais impose seulement un minimum de 16 bits. Le fichier lu depuis une autre machine peut donc donner une valeur totalement tronquée.
    2 ) du boutisme. En effet, les bytes représentant une valeur peuvent être écrits dans un sens ou dans l'autre en mémoire ; cela dépend de la machine. Cela veut dire que si tu lis ton fichier depuis une autre machine, tes valeurs pourront êtres lues à l'envers. Par exemple, si on écrit à la volée dans un fichier une variable int de valeur 0x01234567 sur une machine little-endian, elle sera en fait écrite 0x67452301. Si on la lit ensuite depuis le fichier sur la même machine, elle sera correctement représentée en mémoire (ie : 0x67452301) et sa valeur correspondra toujours à 0x01234567. Mais si on lit le fichier depuis une autre machine, qui est big-endian admettons, la valeur sera toujours représentée 0x67452301 en mémoire mais elle aura pour valeur non pas 0x01234567 mais 0x67452301.

    D'où la raison pour laquelle il ne faut jamais copier à la volée un emplacement mémoire (où se trouve une valeur ou une structure) dans un fichier. Il est préférable d'écrire avec un format portable, qui est indépendant d'une machine.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Merci de votre aide, je tente dans la seconde.

    edit: Geronimo, ca marche, il est vivant.
    C'était donc r+b.

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

Discussions similaires

  1. aide pour modifier fichier bin
    Par bill07200 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 08/09/2014, 15h02
  2. Fichier BIN à modifier
    Par roberto_michello dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 15/10/2013, 01h29
  3. [jar] Comment modifier un fichier jar
    Par newfsch dans le forum JBuilder
    Réponses: 5
    Dernier message: 18/07/2004, 14h25
  4. Lire un fichier bin et cue
    Par calfater dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 18/06/2004, 14h43
  5. [LG]modifier un fichier
    Par fofovi72 dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2004, 21h30

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