Structure et fichier

Résolu
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 28 mai 2007 à 18:37
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010 - 28 mai 2007 à 20:19
Salut a tous,

J'ai un ptit soucis en voulant enregistrer et relire une structure dans un fichier
J'utilise les api CreateFileA, WriteFile et ReadFile

Voici le code:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <Oleauto.h>


typedef struct _MY_STRUCT {
   long      MyLong1;
   long      MyLong2;
   char      MyBuffer[5];
} MY_STRUCT;
 
 
int PutStructToFile(void * TStruct, LPCSTR sFile, DWORD len)
{
   
    HANDLE    hFile;
    DWORD     Ret = 0;
   
    hFile = CreateFileA(sFile, GENERIC_WRITE, FILE_SHARE_WRITE,NULL, CREATE_NEW,FILE_ATTRIBUTE_NORMAL, NULL);
    WriteFile(hFile, TStruct, len, &Ret, 0);
    CloseHandle(hFile);
    return 0;
}


int GetStructFromFile(void * TStruct, LPCSTR sFile, DWORD len)
{
   
    HANDLE    hFile;
    DWORD     Ret    = 0;
    BOOL      RetErr = FALSE;
   
    hFile = CreateFileA(sFile, GENERIC_READ, FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
    RetErr = ReadFile(hFile, TStruct, len, &Ret, 0);
    CloseHandle(hFile);
    return 0;
}
 
int main(int argc, char *argv[])
{
    HANDLE      hFile;
    LPCSTR      sFile    = "E:\\TstFile.txt";
    MY_STRUCT   TStruct1;
    MY_STRUCT   TStruct2;
   
    TStruct1.MyLong1 = 10;
    TStruct1.MyLong2 = 20;
    memcpy(&TStruct1.MyBuffer[0], "Test1", 5);    printf(" TStruct1.MyLong1 %ld \n TStruct1.MyLong2 %ld \n TStruct1.MyBuffer = %s \n\n", TStruct1.MyLong1, TStruct1.MyLong2,&TStruct1.MyBuffer[0] ) ;
   
    PutStructToFile(&TStruct1, sFile, sizeof(TStruct1));
       
    GetStructFromFile(&TStruct2, sFile, sizeof(TStruct2));
        printf(" TStruct2.MyLong1 %ld \n TStruct2.MyLong2 %ld \n TStruct2.MyBuffer = %s \n\n", TStruct2.MyLong1, TStruct2.MyLong2,&TStruct2.MyBuffer[0] ) ;
 
    system("PAUSE");
   
  return 0; 
}

et voici le resultat a l'ecran:

 TStruct1.MyLong1 = 10
 TStruct1.MyLong2 = 20
 TStruct1.MyBuffer = Test1 

 TStruct2.MyLong1 = 2293584
 TStruct2.MyLong2 = 200
 TStruct2.MyBuffer = Test1

les 2 long sont foireux et je ne parviens pas a trouver pourquoi :(

D'avance merci pour votre aide

++

2 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
28 mai 2007 à 19:42
Ça fonctionne sans problème pour moi. Essais ceci:
Remplace le 4ème paramètre de CreateFile, CREATE_NEW, par CREATE_ALWAYS
Copie seulement "Test" dans MyBuffer pour inclure le 0 de fin de chaine:
memcpy(TStruct1.MyBuffer, "Test", 5);

C++ (@++)<!--
3
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
28 mai 2007 à 20:19
Salut SAKingdom,

En effet c'est bien le CREATE_NEW qui posait probleme, ca marche impec now!
Merci beaucoup car la sur le coup j'aurais jamais penser a ca!

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
0
Rejoignez-nous