Format de fichier

Format de fichier - Programmation

Marsh Posté le 04-03-2001 à 14:31:02    

struct t
{
   int n;
   char t[255];
};
 
WriteFile (..., t, ....);
 
Le prob c ke en écrivant ce fichier, 255 bytes dans le fichier seront vide si la chaine de caractère n'en fait pas autant
Comment faire qq chose de mieux ?

Reply

Marsh Posté le 04-03-2001 à 14:31:02   

Reply

Marsh Posté le 04-03-2001 à 14:59:53    

en ecrivant le fichier en binaire, ca marche ptet...

Reply

Marsh Posté le 04-03-2001 à 15:26:49    

En C++ c'est mieux avec les flots. En C je vois pas.

Reply

Marsh Posté le 04-03-2001 à 19:13:32    

en fait je programme en C++ mais j'ai pas trouver un autre moyen et c'est le moyen utiliser pour d'autres fichiers (bitmap).
C koi les flots ? et merci de ne pas me mettre d'exemples MFC car je connais et j'aime po

Reply

Marsh Posté le 04-03-2001 à 19:33:39    

En C:
 
FILE *f=fopen("monfichier","wb" );//tu ouvres tonfichier en écriture en mode binaire
apres il y a des primitice comme
fputc(int ton_octet,FILE *f) pour ecrire dedans.


---------------
http://www.cheata.net le site qui vous donne la banane!
Reply

Marsh Posté le 04-03-2001 à 23:44:15    

bonjour j'ai un exemple qui marche à proposer (pour enregistrer des bmp) j'espere que ce sera utile :
 

Citation :

// Enregistre une image dans un fichier : format bmp
int Save_BMP_Ex(char* nom_fichier,int largeur,int hauteur,GLubyte* mem) {
 // Fichier bmp non compressé 24bits
  FILE*         fichier;
  int           position_tampon=54;
  int           position_image=0;
  int           taille_donnees_fichier=0;
  int           complement=0;
  GLubyte*      tampon=(GLubyte*)NULL;
 
 // initialisation des données
  complement=(largeur*3)%4;
  if (complement>0) {
    complement=4-complement;
    }
  taille_donnees_fichier=54+((largeur*3)+complement)*hauteur;
 
 // création du tampon
  tampon=(GLubyte*)malloc(sizeof(GLubyte)*taille_donnees_fichier);
  if (tampon==(GLubyte*)NULL) {
    return(0);
    }
 
 // remlissage du tampon
 // entete
  tampon[ 0]='B';
  tampon[ 1]='M';
 // taille du fichier
  tampon[ 2]=taille_donnees_fichier & 255;
  tampon[ 3]=(taille_donnees_fichier >> 8) & 255;
  tampon[ 4]=(taille_donnees_fichier >> 16) & 255;
  tampon[ 5]=(taille_donnees_fichier >> 24) & 255;
 // inutilisé
  tampon[ 6]=0;
  tampon[ 7]=0;
  tampon[ 8]=0;
  tampon[ 9]=0;
 // adresse des données
  tampon[10]=54;
  tampon[11]=0;
  tampon[12]=0;
  tampon[13]=0;
 // taille de l'entete
  tampon[14]=40;
  tampon[15]=0;
  tampon[16]=0;
  tampon[17]=0;
 // taille image : largeur et hauteur
  tampon[18]=largeur & 255;
  tampon[19]=(largeur >> 8) & 255;
  tampon[20]=(largeur >> 16) & 255;
  tampon[21]=(largeur >> 24) & 255;
  tampon[22]=hauteur & 255;
  tampon[23]=(hauteur >> 8) & 255;
  tampon[24]=(hauteur >> 16) & 255;
  tampon[25]=(hauteur >> 24) & 255;
 // nombre de plan
  tampon[26]=1;
  tampon[27]=0;
 // nombre de couleur
  tampon[28]=24; // 24 bits
  tampon[29]=0;
 // format de compression (aucune=0)
  tampon[30]=0;
  tampon[31]=0;
  tampon[32]=0;
  tampon[33]=0;
 // taille de l'image : ta mère
  tampon[34]=0;
  tampon[35]=0;
  tampon[36]=0;
  tampon[37]=0;
 // resolution horizontale : 2834ppm
  tampon[38]=18;
  tampon[39]=11;
  tampon[40]=0;
  tampon[41]=0;
 // resolution verticale : 2834ppm
  tampon[42]=18;
  tampon[43]=11;
  tampon[44]=0;
  tampon[45]=0;
 // nombre de couleurs utilisées : ?
  tampon[46]=0;
  tampon[47]=0;
  tampon[48]=0;
  tampon[49]=0;
 // nombre de couleurs importantes : ?
  tampon[50]=0;
  tampon[51]=0;
  tampon[52]=0;
  tampon[53]=0;
 // image
  for (int i=0;i<hauteur;i++) {
    for (int j=0;j<largeur;j++) {
      tampon[position_tampon  ]=mem[position_image+2];
      tampon[position_tampon+1]=mem[position_image+1];
      tampon[position_tampon+2]=mem[position_image  ];
      position_tampon=position_tampon+3;
      position_image=position_image+3;
      }
    position_tampon=position_tampon+complement;
    }
 
 // Ouverture du fichier
  fichier = fopen(nom_fichier,"wb" );
  if (fichier==(FILE*)NULL) {
    free(tampon);
    return(0);
    }
 
 // Ecriture du fichier
  fseek(fichier,0,0);
  if (fwrite(tampon,1,taille_donnees_fichier,fichier)!=taille_donnees_fichier) {
    free(tampon);
    return(0);
    }
 
 // fin
  free(tampon);
  fclose(fichier);
  return(1);
}

 

--Message édité par darkoli--

Reply

Marsh Posté le 05-03-2001 à 20:51:15    

Désolé pour l'exemple je sais déjà enregistrer une image BMP.
Moi ce ke je veux c enregistrer la structure entière. Mais il faut ke la variable char soit dim (255 par ex). Mais si la chaine fait moins, c va po (c po bien)
QQ a un autre moyen sinon je vire la struct et je fait chaque variable a part...

Reply

Sujets relatifs:

Leave a Replay

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