begin process at 2012 05 30 12:08:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

structure et fichier


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

structure et fichier

lundi 28 mai 2007 à 18:37:15 | structure et fichier

draluorg


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

++

lundi 28 mai 2007 à 19:42:34 | Re : structure et fichier

SAKingdom

Membre Club
Réponse acceptée !
Ç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++ (@++)

lundi 28 mai 2007 à 20:19:49 | Re : structure et fichier

draluorg

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...


Cette discussion est classée dans : hfile, tstruct1, tstruct2, mylong1, mylong2


Répondre à ce message

Sujets en rapport avec ce message

Avis des PROS! [ par UnExPeCtEdSpy ] Bonjour,je suis plus familier du vb que du c++ alors j'vous d'mande de l'aide :J'utilise une Dll en c+ avec un prog en Vb qui manipule des fichiers.Qu Comparaison de Variables [ par CassusGreg ] Salut a tous,Je débute vraiment en C++ (je suis sous VC++6)Je ne comprend pas grand chose en déclaration de variables et en test de comparaison. Mon b Variable offset je n'y comprend vraimen rien!! [ par CassusGreg ] void LireLigne(HANDLE hFile) { for (int i=0; i ReadFile(hFile,&buff[i],1,&Ecrit,0); if (buff[i]=='\n') { buff[i-1]=0; i=100; } } return;}LireLi message d'erreur a l'execution [ par frdestroyers27 ] Bonjours a tous!j'ai taper le programme suivant en Win32Console app.#include #include #include char nom[50][MAX_PATH];void lister(LPCTSTR file);void a prgramme qui plante lors de Lecture de fichier [ par samki ] Bonjourj utilise la fonction suivante pour lire des fichiers:CString GenerateHTML::bReadFileHTML(CString FileName){ DWORD dwWritten; CString PathTempl Access Violation avec un new char [ par PSylvie ] Bonjour,mon application pour Smartphone 2003 plante toujours au même endroit (l'appli se ferme). Si je débugge, je constate un "0xC0000005 : Access Vi HttpQueryInfo [ par vecchio56 ] Bonjour,J'ai un probleme avec la fonction HttpQueryInfo: elle renvoie toujours 0, ce qui signifie que ca échoue.Je l'utilise comme ca: (hfile est bien CreatePorcess + App 16-bits [ par vecchio56 ] BonjourJ'éxécute une application 16-bits avec CreateProcess mais je n'arrive pas à récupérer ce qu'il y a dans stdout. Le problème c'est que le même c [API WIN32] Problème d'écriture dans un fichier [ par elchevive ] Salut à tous, j'ai un petit problème avec une fonction qui est censée écrire dans un fichier le contenu de l'edit d'une fenêtre MDI. Il créer le fich Ecrire du texte [ par angsthase ] Salut à tous Je voudrais créer un fichier texte et y ecrire quelquechose dedans, mais je n'y arrive pas. Le fichier ce créer bien, mais il n'y a rien


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,796 sec (4)

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