ecrire dans un fichier binaire

ecrire dans un fichier binaire - C - Programmation

Marsh Posté le 21-06-2005 à 13:30:02    

Bonjour,
je fais des traitement sur un fichier binaire, et je met le resultat dans un autre fichier.

Code :
  1. source = fopen(fichier-entrer, "rb" );
  2. dest = fopen(fichhier-sortant, "wb" );
  3. fread(buf, 1, nb, source); //lire la donnée à partir du fichier source (entrer)
  4. //traitement
  5. fwrite(buf, 1, nb, dest); // ecrire la donnée dans le fichier sortant
  6. .....


ça marche normal.
je voudrais faire les traitement et écrire dans le même fichier entrer (fichier source) j'arrive pas ?
Merci

Reply

Marsh Posté le 21-06-2005 à 13:30:02   

Reply

Marsh Posté le 21-06-2005 à 13:33:06    

certains le dirons mieux que moi, 'fin en général faut éviter de lire et écrire en même temps dans le même fichier, vaut mieux lire sur un, écrire sur un autre, et à la fin, tu renomme le nouveau avec le nom de l'ancien pour l'écraser.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 21-06-2005 à 13:39:12    

demo2000 a écrit :


je voudrais faire les traitement et écrire dans le même fichier entrer (fichier source) j'arrive pas ?


 
Tant mieux. C'est un nid à catastrophes.

Reply

Marsh Posté le 21-06-2005 à 13:39:28    

oui je sais avec :

Code :
  1. rename()


mais dès fois on à besoin d'éspace alors ...  
merci

Reply

Marsh Posté le 21-06-2005 à 13:40:41    

demo2000 a écrit :

Bonjour,
je fais des traitement sur un fichier binaire, et je met le resultat dans un autre fichier.

Code :
  1. source = fopen(fichier-entrer, "rb" );
  2. dest = fopen(fichhier-sortant, "wb" );
  3. fread(buf, 1, nb, source); //lire la donnée à partir du fichier source (entrer)
  4. //traitement
  5. fwrite(buf, 1, nb, dest); // ecrire la donnée dans le fichier sortant
  6. .....


ça marche normal.
je voudrais faire les traitement et écrire dans le même fichier entrer (fichier source) j'arrive pas ?
Merci


 
Ca veut dire quoi "j'arrive pas" .
A la fin de la lecture, il faut que tu te remette avec fseek au début, et tu écris dessus tes anciennes données, il n'y a pas de problème (sauf si tu réécris quelque chose de plus court que l'ancien fichier).

Reply

Marsh Posté le 21-06-2005 à 13:48:02    

pascal_ a écrit :

A la fin de la lecture, il faut que tu te remette avec fseek au début, et tu écris dessus tes anciennes données, il n'y a pas de problème (sauf si tu réécris quelque chose de plus court que l'ancien fichier).


 
C'est un gros "sauf" qui contraint d'ores et déjà à passer par un autre fichier.
 
Mais surtout, il se passe quoi si le programme crash, pour une raison ou pour une autre, en plein traitement d'un fichier de données de quelques dizaines de méga ?
Ton code n'assure pas l'intégrité des données traitées, ce qui est potentiellement catastrophique. Et "potentiellement", en informatique, signifie "ça va arriver".

Reply

Marsh Posté le 21-06-2005 à 13:49:28    

la fonction truncate, c'est pas standard ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 21-06-2005 à 13:50:12    

c.a.d :
quand je lance mon programme. j'aurais un seul fichier en sortie (resultat = source après traitement) et non 2 (source et resultat)
pascal_
 

Citation :


  ... il n'y a pas de problème (sauf si tu réécris quelque chose de plus court que l'ancien fichier).
 


 
justement la taille change  
Merci encore

Reply

Marsh Posté le 21-06-2005 à 13:53:58    

0x90 a écrit :

la fonction truncate, c'est pas standard ?


 
A priori, c'est POSIX, mais pas ANSI :
http://www.schweikhardt.net/identifiers.html
 
 
 

Citation :

quand je lance mon programme. j'aurais un seul fichier en sortie (resultat = source après traitement) et non 2 (source et resultat)


 
Une fois le second fichier généré, il suffit d'effacer le premier et de renommer le second.


Message édité par Elmoricq le 21-06-2005 à 13:54:58
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed