begin process at 2012 05 29 23:02:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

Lecture de fichier binaire structuré


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture de fichier binaire structuré

mercredi 19 novembre 2003 à 13:16:19 | Lecture de fichier binaire structuré

nico20000

Bonjour,

j'ai besoin de lire dans un fichier binaire dont l'entête
ressemble à ceci: (traduite en hexa)
Properties gc90063 num FTPLocal le 17/11/2003
Je dois récupérer la chaine gc90063 et la date.

Ensuite le fichier est organisé de la façon suivante:
0A 00 00 00 00 0B 00 01 02 03
----- -- -- -- ----- -- -- --
Heure E1 E2 E3 Heure E1 E2 E3

On a l'heure en minute sur les 2 premiers octets, suivi de
3 entiers entre 0 et 255 sur les 3 octets suivants.

J'ai créé une structure :

struct RECORDS
{
short heure_en_min;
char cpt1;
char cpt2;
char cpt3;
};

Comment puis-je lire le fichier binaire pour récupérer le
header puis les différents enregistrements ?

mercredi 19 novembre 2003 à 13:41:27 | Re : Lecture de fichier binaire structuré

neodante

Administrateur CodeS-SourceS

Neodante

Juste pour t'aider un peu on ouvre un fichier en binaire avec l'attribut "rb" (lecture) ex:
fopen("toto.dat", "rb");
Ensuite un petit malloc et un fread() avec un size(struct RECORDS) pour la taille (la quantité est à 1!) et la fonction te placera tes données directement dans ta jolie structure que tu n'auras plus qu'à lire !
Exemple d'un bout de code pour lire des fichiers (de Tomb Raider) :

// Allocating memory for textiles (num_textiles * 256 * 256)
m_file_header->textile8 = new tr2_textile8[m_file_header->num_textiles];
// Load textiles
for (register ubit32 i = 0; i < m_file_header->num_textiles; ++i)
fread(&m_file_header->textile8[i], sizeof(tr2_textile8), 1, m_fp);

J'espère que t'as compris le principe !

@+
mercredi 19 novembre 2003 à 13:42:20 | Re : Lecture de fichier binaire structuré

neodante

Administrateur CodeS-SourceS

Neodante

A oui juste au passage si tu n'avais pas remarqué : tr2_texttile8 est une structure tout comme RECORS !
@+
mercredi 19 novembre 2003 à 13:51:46 | Re : Lecture de fichier binaire structuré

nico20000

Merci.

Quand j'écris dans le fichier, il y a 6 octets au lieu de 5 ?!?

L'execution du prg ci dessous donne :
21116Number of items read = 25
Contents of buffer =

la taille du struct fait 6 octets !
Pourquoi pas 5 octest ?


struct RECORDS // Declare PERSON struct type
{
unsigned short heure_en_min;
char entrees;
char sorties;
char indetermines;
};


int main( void )
{
FILE *stream;
short i, numread, numwritten;
RECORDS enreg[50] = { 0,char('0'),char('0'),char('0')};

if( (stream = fopen( "fread.out", "w+b" )) != NULL )
{
for ( i = 0; i < 50; i++ )
{
enreg[i].heure_en_min = (unsigned short)(100 + i);
enreg[i].entrees = (char)(1);
enreg[i].sorties = (char)(2);
enreg[i].indetermines = (char)(3);
}

/* Write 25 characters to stream */
numwritten = fwrite( enreg,sizeof(enreg) , 50, stream );
//printf( "Wrote %d items\n", numwritten );
printf ("%d",sizeof(enreg[1].heure_en_min));
printf ("%d",sizeof(enreg[1].entrees));
printf ("%d",sizeof(enreg[1].sorties));
printf ("%d",sizeof(enreg[1].indetermines));
printf ("%d",sizeof(enreg[1]));
fclose( stream );
}
else
printf("Problem opening the file\n");
if( (stream = fopen( "fread.out", "r+b" )) != NULL )
{
/* Attempt to read in 25 characters */
numread = fread( enreg, sizeof(RECORDS), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25n\n", enreg );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
mercredi 19 novembre 2003 à 15:19:08 | Re : Lecture de fichier binaire structuré

neodante

Administrateur CodeS-SourceS

Neodante

Fais des sizeof (char), sizeof(struct RECORDS) et non pas sizeof(variable) ... tout devrait rentrer dans l'ordre.
Normalement ton code marche ... du moins pour moi !
@+
jeudi 20 novembre 2003 à 00:15:10 | Re : Lecture de fichier binaire structuré

aardman

Membre Club
Salut,
Pour la struct qui fait 6 octet au lieu de 5 c'est normal, c'est a cause de l'alignement des données.
En fait, le cpu ne manipule que des word (16bits) et lors de la compilation, le compilateur va rajouter un octet a ta structure pour qu'elle fasse 6 octets, soit 3*2 word, pour respecter ces regles d'alignements.
jeudi 20 novembre 2003 à 19:30:42 | Re : Lecture de fichier binaire structuré

nico20000

merci beaucoup !

je me suis servi de la fonction fseek pour me repositionner au bon offset à chaque lecture.

En tout cas merci à tous !!!!


Cette discussion est classée dans : fichier, lecture, binaire, heure, char


Répondre à ce message

Sujets en rapport avec ce message

Lecture dans un fichier ... CHaud !! [ par ilyatout ] Bonjour,VOilà g un gros problème, c'est idiot mais je n'y arrive pas.j'ai un fichier de la sorte :NOM : NICOLAS / MARTIN // 28je dois stocker NICOLAS Lecture fichier [ par AlexMAN ] Bonjour, Je me pose pas mal de questions a propos de la lecture de fichier utilisant les API : -Dois je lire l'integralité d'un fichier en allouant a Lecture fichier binaire [ par benus ] Bonjour;Je travaille sur les fichiers en ce moment et j'aurai aimé savoir aprés la lecture d'un fichier avec :FILE* file = fopen("toto.bin", "rb");fre lecture ecriture dans un fichier binaire [ par bbear ] j'ai 2 tableaux : un de unsigned int et un de char "string"unsigned int tabint[]={ xxx,xxx,xxx...};char *tabnom[]={ "nom1","nom2","nom3"...};je voudra [C++] Lecture et écriture binaire [ par pop70 ] Bonjour, voici mon problème : J'ai des objet que j'aimerais sauvegarder (j'ai simplifié mon code en utilisant un seul objet string) via une écriture erreur de pointeur [ par africanwinners ] Bonsoir j'ai concu un programme c qui permet de lire un fichier,de supprimer les doublons (les doubles) mais il y a des problèmes lors de la lecture d Probleme avec lecture fichier INI [ par Kaioshin12 ] Bonjour, J'ai un soucis avec la lecture d'un fichier .ini. J'utilise la fonction : GetPrivateProfileString("DATABASE","Serveur","",MaVariable,100,"Co converteur audio (wav) en binaire [ par polobou ] [b]Bonjour[/b][^^happy10] j'ai besoin d'un logiciel qui peut m'aider a converter un "fichier.wav" au code binaire dans un autre "fichier.bin". [b]Merc Convertir un fichier binaire pour utilsation en mysql [ par 67geek67 ] Salut tout le monde, J'utilise c pour une application industrielle. Je suis chef de projet, responsable d'une collecte de données sur des chaines de


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales