Ecrire dans un fichier texte dans un TIMER. Ecriture continue [Résolu]

Signaler
Messages postés
27
Date d'inscription
lundi 26 janvier 2009
Statut
Membre
Dernière intervention
6 mars 2009
-
Messages postés
27
Date d'inscription
lundi 26 janvier 2009
Statut
Membre
Dernière intervention
6 mars 2009
-
Bonjour à tous,

Voici le code d'un timer que j'ai sur un de mes dialog :


void TTest::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    long lCounter = 0;
    long lStatus  = 0;
    bool test = false;
    char  valeurCounter[50];

    time_t timer1;
    time(&timer1);
    int secondes, minutes, heures ;
    char c_heures[5];
    char c_minutes[5];
    char c_secondes[5];
    char c_HeureComplete[50];
    struct tm *newTime1;
    newTime1 = localtime(&timer1);
    heures = newTime1->tm_hour; // Les heures sont dans "heures"
    minutes = newTime1->tm_min; // Les minutes sont dans "minutes"
    secondes = newTime1->tm_sec; // Les secondes sont dans "secondes"

    // Mise à jour des données (Case à cocher notamment)
    UpdateData(true);

    if (nIDEvent == 1)
    {
        m_hTmpBitmap = LoadBitmap (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LED_V));
        m_gLed.SetBitmap(m_hTmpBitmap);
        DeleteObject(m_hTmpBitmap);

        if (m_gCounter.m_iStat == DINIT)
        {
            if (TP_PM249_Initialize(m_iAxe + 1))
            {
                if (TP_PM249_SetMultiplier(m_iAxe + 1, 1))
                {
                   
                    if ( TP_PM249_SetMode(m_iAxe + 1, PM249_NO_REF))
                   
                    {
                        m_gCounter.m_iStat = DNUM;
                    } // if ( TP_PM249_SetMode(m_iAxe + 1, PM249_NO_REF))
                } // if (TP_PM249_SetMultiplier(m_iAxe + 1, 1))
            } // if (TP_PM249_Initialize(m_iAxe + 1))
        } //if (m_gCounter.m_iStat == DINIT)

        test = TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus);

        //TP_PM249_API bool __stdcall TP_PM249_GetCounter(long DeviceNo, long* Count, long* Status);
        if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
        {
            m_gCounter.m_iStat = DINIT;
           
        } // if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
        else
        {   
            if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)
            {
                m_gCounter.m_iStat = DERROR;
            } // if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)
            else
            {
                m_gCounter.m_iStat = DNUM;
                m_gCounter.m_dNum = RATIO * lCounter;
                sprintf(valeurCounter, "%f", m_gCounter.m_dNum);

            } //else de if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)

        m_gCounter.Invalidate();

        m_hTmpBitmap = LoadBitmap (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LED_R));
        m_gLed.SetBitmap(m_hTmpBitmap);
        DeleteObject(m_hTmpBitmap);
        } // else de if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
   
        CDialog::OnTimer(nIDEvent);

        if (m_chk_export)
            {

                //test si fichier existe
                if((_access( "c:\\test.txt", 0 )) != -1 )
                {
               
                    // Conversion des INT en CHAR (pour affichage)
                    sprintf(c_heures, "%d", heures);            //HEURE
                    sprintf(c_minutes, "%d", minutes);            //MINUTES
                    sprintf(c_secondes, "%d", secondes);        //SECONDES
                       
                    // Va afficher le format de l'heure suivant : HH:MM:SS
                    strcat(c_heures,":");
                    strcat(c_heures,c_minutes);
                    strcat(c_heures,":");
                    strcat(c_heures,c_secondes);
                       
                    // On ajoute la valeur du compteur pour l'afficher plus loins ...
                    strcat(c_heures," --> ");
                    strcat(c_HeureComplete,c_heures);
                    strcat(c_HeureComplete,valeurCounter);
                   
                    // Ouverture du fichier
                    CStdioFile f1 ("c:\\test.txt", CFile::modeCreate | CFile::modeWrite | CFile::typeText );
                       
                    f1.WriteString(c_HeureComplete);

                    // Retour à la ligne
                    f1.WriteString("\n");
                   
                    // Fermeture du fichier
                    f1.Close();
                       
                }     //if((_access( "c:\\README.TXT", 0 )) != -1 )
            } //if (m_chk_export)
    } // if (nIDEvent == 1)
} // void TTest::OnTimer(UINT nIDEvent)




L'objectif de ce timer c'est d'afficher une valeur dans une zone de texte présente sur le dialog et de l'écrire dans un fichier texte.

Actuellement, tout fonctionne correctement mais je désirerais que mon fichier text se remplisse au fur et à mesure des passages ... pas que la première ligne se remplace à chaque passage ...

Actuelement le contenu de mon fichier texte se présente comme suit :
Ligne 1 : 12:45:27 --> 0.0032134

Et ce que j'aimerais c'est ceci :
Ligne 1 : 12:45:27 --> 0.0032234
Ligne 2 : 12:45:35 --> 0.0036734
Ligne 3 : 12:45:45 --> 0.0032174
Ligne 4 : 12:45:55 --> 0.0039744
etc...

Merci d'avance pour votre aide ... ...

Salutations à vous tous ...

1 réponse

Messages postés
27
Date d'inscription
lundi 26 janvier 2009
Statut
Membre
Dernière intervention
6 mars 2009

Chers amis ...

Je ne sais pas si je viens d'avoir une illumination ou pas ... mais ... j'ai réussi ... ... ... c'est assez incroyable car cela fait quand même quelques jours que je galère là dessus ... ...

Voici mon code : (en bleu ce qui n'a pas changé et en rouge ce qui a changé)

void TTest::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    long lCounter = 0;
    long lStatus  = 0;
    bool test = false;
    char  valeurCounter[50];

    time_t timer1;
    time(&timer1);
    int secondes, minutes, heures ;
    char c_heures[5];
    char c_minutes[5];
    char c_secondes[5];
    char c_HeureComplete[50];
    struct tm *newTime1;
    newTime1 = localtime(&timer1);
    heures = newTime1->tm_hour; // Les heures sont dans "heures"
    minutes = newTime1->tm_min; // Les minutes sont dans "minutes"
    secondes = newTime1->tm_sec; // Les secondes sont dans "secondes"

    // Mise à jour des données (Case à cocher notamment)
    UpdateData(true);

    if (nIDEvent == 1)
    {
        m_hTmpBitmap = LoadBitmap (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LED_V));
        m_gLed.SetBitmap(m_hTmpBitmap);
        DeleteObject(m_hTmpBitmap);

        if (m_gCounter.m_iStat == DINIT)
        {
            if (TP_PM249_Initialize(m_iAxe + 1))
            {
                if (TP_PM249_SetMultiplier(m_iAxe + 1, 1))
                {
                   
                    if ( TP_PM249_SetMode(m_iAxe + 1, PM249_NO_REF))
                   
                    {
                        m_gCounter.m_iStat = DNUM;
                    } // if ( TP_PM249_SetMode(m_iAxe + 1, PM249_NO_REF))
                } // if (TP_PM249_SetMultiplier(m_iAxe + 1, 1))
            } // if (TP_PM249_Initialize(m_iAxe + 1))
        } //if (m_gCounter.m_iStat == DINIT)

        test = TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus);

        //TP_PM249_API bool __stdcall TP_PM249_GetCounter(long DeviceNo, long* Count, long* Status);
        if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
        {
            m_gCounter.m_iStat = DINIT;
           
        } // if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
        else
        {   
            if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)
            {
                m_gCounter.m_iStat = DERROR;
            } // if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)
            else
            {
                m_gCounter.m_iStat = DNUM;
                m_gCounter.m_dNum = RATIO * lCounter;
                sprintf(valeurCounter, "%f", m_gCounter.m_dNum);

            } //else de if ((lStatus & PM249_ERROR_BIT) == PM249_ERROR_BIT)

        m_gCounter.Invalidate();

        m_hTmpBitmap = LoadBitmap (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_LED_R));
        m_gLed.SetBitmap(m_hTmpBitmap);
        DeleteObject(m_hTmpBitmap);
        } // else de if (!TP_PM249_GetCounter(m_iAxe + 1, &lCounter, &lStatus))
   
        CDialog::OnTimer(nIDEvent);

        if (m_chk_export)
            {
                //test si fichier existe
                if((_access( "c:\\test.txt", 0 )) != -1 )
                {
                    // Conversion des INT en CHAR (pour affichage)
                    sprintf(c_heures, "%d", heures);            //HEURE
                    sprintf(c_minutes, "%d", minutes);            //MINUTES
                    sprintf(c_secondes, "%d", secondes);        //SECONDES
                       
                    // Va afficher le format de l'heure suivant : HH:MM:SS
                    strcat(c_heures,":");
                    strcat(c_heures,c_minutes);
                    strcat(c_heures,":");
                    strcat(c_heures,c_secondes);
                       
                    // On ajoute la valeur du compteur pour l'afficher plus loins ...
                    strcat(c_heures," --> ");
                    strcat(c_HeureComplete,c_heures);
                    strcat(c_HeureComplete,valeurCounter);
                   
                    // Ouverture du fichier
                    CStdioFile f1 ("c:\\test.txt", CFile::modeCreate | CFile::modeNoTruncate |CFile::modeWrite);

                    // Ecrire à la suite du fichier (à la fin)
                    f1.SeekToEnd();
                    f1.WriteString(c_HeureComplete);
       
                    // Retour à la ligne
                    f1.WriteString("\n");

                    // Fermeture du fichier
                    f1.Close();   
                }     //if((_access( "c:\\README.TXT", 0 )) != -1 )
            } //if (m_chk_export)
    } // if (nIDEvent == 1)
} // void TTest::OnTimer(UINT nIDEvent)