extraire une partie d'un fichier

extraire une partie d'un fichier - C - Programmation

Marsh Posté le 06-11-2006 à 18:21:35    

Bonjour,
 
Je souhaiterais extraire une partie d'un fichier (en l'occurence, une image) comportant un entête.
Je connais la taille de mon entête en nombre de bits, et je ne voudrais récupérer que la partie image (et l'enregistrer dans un nouveau fichier).
J'ai pensé à :
1- ouvrir le fichier comportant entête + image
2- déplacer un pointeur au début de l'image
3- enregistrer la fin du fichier (partie image) dans une variable
4- stocker la variable dans un nouveau fichier
5- fermer les deux fichiers
 
Cependant, je bloque à l'étape 2, je ne vois pas comment déplacer mon pointeur au début de l'image (avec fseek, je ne peux pas faire cela).
Quelqu'un aurait-il une idée?
Merci d'avance!
Sandra

Reply

Marsh Posté le 06-11-2006 à 18:21:35   

Reply

Marsh Posté le 06-11-2006 à 18:24:32    

si fseek marche bien ici : soit myFile ton fichier (FILE*) et K la taille de ton en-tête :
 
fseek( myFile, K, SEEK_SET);  
 
et voilà !

Reply

Marsh Posté le 06-11-2006 à 18:59:49    

Pourquoi tu dis que fseek ne marche pas ? Sinon dd fait ca tres bien (sous linux/unix), pas besoin de recoder ca en C.

Reply

Marsh Posté le 07-11-2006 à 09:41:55    

Ah bon, je pensais que K était un long indiquant le nombre de caractères à passer (et non un nombre de bits!). Je vais essayer, merci jesus_christ
Sinon, si je n'y arrive pas comme ça, j'essaerai la méthode matafan (dd tu dis? je vais regarder cette commande en détail)
Merci pour vos conseils!

Reply

Marsh Posté le 07-11-2006 à 10:48:48    

T'es sur que tu veut avancer d'un certain nombre de bits et pas d'un nombre d'octets ?

Reply

Marsh Posté le 07-11-2006 à 13:28:40    

Non, c'était bien un nombre de bits. J'ai testé, ça a l'air de bien marché.
 
Voilà  en gros les lignes de mon code:
 
FILE      *fic_in, *fic_raw;
int        K=21504;
char      ligne[512];
char      file_path[50];
 
fic_in = fopen(file_path,"r" );  /* file_path le path du fichier */
  if (fic_in == NULL)
  {
 
  }
 
fic_raw = fopen(file_path,"w" );  /* file_path le path du fichier */
  if (fic_raw == NULL)
  {
 printf("Error when openning file %s\n", fic_raw);
  }
   
  fseek(fic_in, K, SEEK_SET);
  while(fgets( ligne , 512, fic_in ) != NULL) {
   fprintf(fic_raw,"%s", ligne);
  }
 
  fclose(fic_in);
  fclose(fic_raw);

Reply

Marsh Posté le 07-11-2006 à 15:08:43    

K est en octets (bytes).

Reply

Marsh Posté le 07-11-2006 à 15:10:35    

sandra771 a écrit :

Non, c'était bien un nombre de bits. J'ai testé, ça a l'air de bien marché.
 
Voilà  en gros les lignes de mon code:
 
FILE      *fic_in, *fic_raw;
int        K=21504;
char      ligne[512];
char      file_path[50];
 
fic_in = fopen(file_path,"r" );  /* file_path le path du fichier */
  if (fic_in == NULL)
  {
 
  }
 
fic_raw = fopen(file_path,"w" );  /* file_path le path du fichier */
  if (fic_raw == NULL)
  {
 printf("Error when openning file %s\n", fic_raw);
  }
   
  fseek(fic_in, K, SEEK_SET);
  while(fgets( ligne , 512, fic_in ) != NULL) {
   fprintf(fic_raw,"%s", ligne);
  }
 
  fclose(fic_in);
  fclose(fic_raw);


 
byte != bit !


---------------
Töp of the plöp
Reply

Sujets relatifs:

Leave a Replay

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