IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Ecrire dans un fichier


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 63
    Par d�faut Ecrire dans un fichier
    Bonjour � Tous,

    J'essaye d'�crire des donn�es dans un fichier "Categorie.txt".
    Voici le code de mon programme :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    void __fastcall TDefinitionCategorie::PoussinOKClick(TObject *Sender)
    {
    void __fastcall TDefinitionCategorie::PoussinOKClick(TObject *Sender)
    {
      char buffer[500];
     
     // CREATION FICHIERS DE SAUVEGARDE
      struct CATEGORIE {
                       AnsiString NaisPou1[4];
                       AnsiString NaisPou2[4];
                       AnsiString NaisBen1[4];
                       AnsiString NaisBen2[4];
                       AnsiString NaisMin1[4];
                       AnsiString NaisMin2[4];
                       AnsiString NaisSen1[4];
                       AnsiString NaisSen2[4];
                     }TabCat[8];
     
      HANDLE hCat;
      hCat = CreateFile ("Categorie.txt",
                            GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ,
                            NULL,
                            CREATE_ALWAYS,
                            FILE_ATTRIBUTE_READONLY,
                            NULL);
     
      if(hCat != INVALID_HANDLE_VALUE)
       {
          //Nombre de caracteres écrits dans le buffer
          DWORD nBW;
     
         for(int i=0;i<sizeof TabCat / sizeof TabCat[0];i++)
              WriteFile(hCat,&TabCat[i], sizeof TabCat[i],nBW, NULL);
         CloseHandle(hCat);
     
         //Focus au champ Naissance POUSSIN 2
         NaisPous2->SetFocus();
       }
       else
       {
         FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                       NULL,GetLastError(),
                       MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH),
                       buffer, 500, NULL);
       }
     
      //Focus au champ NAISSANCE BENJAMIN : NaisBen1
      NaisBen1->SetFocus();
    }}
    Mais, cela g�n�re des erreurs du style :
    [C++ Erreur] Categorie_Combattant.cpp(83): E2034 Impossible de convertir 'unsigned long' en 'unsigned long *'
    [C++ Erreur] Categorie_Combattant.cpp(83): E2342 Mauvaise correspondance de type dans le param�tre 'lpNumberOfBytesWritten' ('unsigned long *' d�sir�, 'unsigned long' obtenu)
    Je ne comprends pas le message E2034. Pourquoi faut-il faire cette conversion?
    Je ne comprends �gelement pas le message E2342...
    Pourriez-vous m'aider???
    Merci d'avance...

  2. #2
    Membre chevronn�
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    D�tails du profil
    Informations personnelles :
    �ge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Par d�faut
    1. J'esp�re que tu n'as pas dans ton v�ritable code 2 fois la ligne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void __fastcall TDefinitionCategorie::PoussinOKClick(TObject *Sender)
    comme montr� dans ton message.

    2. Je ne sais pas o� est la ligne 83 mais le message signifie que tu passes � ta fonction un param�tre unsigned long alors qu'elle un attend un pointeur sur un unsigned long.

    3. Tu cr�es ton fichier avec l'attribut FILE_ATTRIBUTE_READONLY ce qui t'emp�cherait d'�crire dedans au cas o� �a compilerait avec succ�s.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 63
    Par d�faut
    Bonjour Altau,

    1� Erreur de ma part, lors de la copie de mon code dans la fen�tre d'explication.
    2� Par contre, je vais regarder de plus pr�s le param�trage de la fonction WriteFile...
    3� Je vais modifier les droits d'acc�s au fichier.
    pour tes conseils... au revoir...

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    bonjour
    dans ton code tu a fait une structure avec des AnsiString
    struct CATEGORIE {
    AnsiString NaisPou1[4];
    AnsiString NaisPou2[4];
    AnsiString NaisBen1[4];
    AnsiString NaisBen2[4];
    AnsiString NaisMin1[4];
    AnsiString NaisMin2[4];
    AnsiString NaisSen1[4];
    AnsiString NaisSen2[4];
    }TabCat[8];
    AnsiString est une classe Borland pour la gestion des ch�ines de caract�res
    la taille d'une classe est �gale � la taille d'un pointeur cad 4

    tu ne peux par cons�quent utiliser de sizeof pour connaitre la taille de ta structure mais pour chaque �l�ment AnsiString de ta structure la fonction Length() qui re donne la taille exact de ta chaine.

    dans ton cas il est pr�f�rable d'utiliser des tableaux de caract�res

    concernant ton erreur
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    WriteFile(hCat,&TabCat[i], sizeof TabCat[i],nBW, NULL);
    nBW doit �tre un pointeur sur un unsigned long tu dois donc prefixer cette variable avec un '&'

    cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 63
    Par d�faut
    Bonjour les amis,

    Malgr� vos conseils, je suis pas arriv� � utliser la fonction WriteFile.
    Cependant, j'ai modifi� mon code avec des fonctions en C.
    Voici le code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       int handle1;
       int handle2;
       char string1[4];
       char string2[4];
      //Récuperation de Edit1->Text dans cp1
       char* cp1 = Edit1->Text.c_str();
       strcpy(string1, cp1);
        _fmode = O_BINARY;
       //Creation du fichier en mode binaire en ecriture et lecture
       handle1 = creat("c:\\NaisPous1.txt", S_IREAD |S_IWRITE);
       // Ecriture de 4 caracteres dans le fichier
       write(handle1, string1, strlen(string1));
       //Fermeture Fichier
       close(handle1);
     
      //Récuperation de Edit2->Text dans cp1
       char* cp2 = Edit2->Text.c_str();   
       strcpy(string2, cp2);
       _fmode = O_BINARY;
       //Creation du fichier en mode binaire en ecriture et lecture   
       handle2 = creat("c:\\NaisPous2.txt", S_IREAD |S_IWRITE);
      // Ecriture de 4 caracteres dans le fichier
       write(handle2, string2, strlen(string2));
       //Fermeture Fichier
       close(handle2);
    }
    Cela fonctionne tr�s bien.
    Mais pouvez-vous me mettre sur la voie pour la r�alisation d'une structure du type
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
       struct Poussin
        {
        char NaisPou1[4];
        char NaisPou2[4];
        };
    Edit1->Text et Edit2->text seront �crit respectivement dans NaisPou1 et NaisPou2 de cette structure selon le principe d�crit plus haut. En esp�rant, que cela reste compatible...
    d'avance pour votre aide...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2006
    Messages
    63
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2006
    Messages : 63
    Par d�faut
    Bonjour � Tous,

    La pers�v�rance a port� ces fruits...
    Voici le code que j'utilise pour mon probl�me d'�criture dans un fichier (utlisation d'une structure)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
     int iFileHandle;
     
     struct Poussin
            {
                    char Pous1[4];
                    char Pous2[4];
            }Nais;
     
     StrCopy (Nais.Pous1,MaskEdit1->Text.c_str());
     StrCopy (Nais.Pous2,MaskEdit2->Text.c_str());
     
     iFileHandle = FileCreate("C:\\Poussin.txt");
     
     FileWrite(iFileHandle,Nais.Pous1, sizeof(Nais.Pous1));
     FileWrite(iFileHandle,Nais.Pous2, sizeof(Nais.Pous2));
     
     FileClose(iFileHandle);
    }
    Ce n'est peut-�tre pas le mieux, mais cela fonctionne...

    � Tous pour vos conseils...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Ecrire \" dans un fichier
    Par photorelief dans le forum Langage
    R�ponses: 2
    Dernier message: 14/09/2005, 15h56
  2. [JAR] Lire et Ecrire dans un fichier contenu dans un jar
    Par lipao17 dans le forum G�n�ral Java
    R�ponses: 5
    Dernier message: 02/05/2005, 12h01
  3. Ecrire dans un fichier
    Par gibet_b dans le forum Linux
    R�ponses: 5
    Dernier message: 25/04/2005, 20h11
  4. Ecrire dans un fichier grace � un trigger ?
    Par zigoo dans le forum PostgreSQL
    R�ponses: 1
    Dernier message: 29/10/2004, 20h03
  5. Ecrire dans un fichier sans supprimer le reste
    Par koan_sabian dans le forum Linux
    R�ponses: 4
    Dernier message: 20/02/2003, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo