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++ Discussion :

Comment insérer la date dans l'entête d'un fichier en c++ sous linux ?


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment insérer la date dans l'entête d'un fichier en c++ sous linux ?
    Bonjour à tous,

    j'ai réalisé une application sous windows avec BC++, et je suis en train de réaliser la même application sous linux.

    Mon application fonctionne à l'exception que lorsque je créé un fichier, dans l'entête du fichier il y avait la date, j'inscrivais aussi l'heure à l'intérieur du fichier, et sous linux je ne sais pas comment faire la même chose !!!

    J'avais codé comme ceci sous windows :

    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
     
    TDateTime Date;
    Date = Now();
    ShortDateFormat = "dd.mm.yyyy";
    LongTimeFormat = "hhnn";
    AnsiString nom = Date.DateString() + "-" + ((buf[4] << 16) + (buf[5] << 8) + buf[6]) + ".gm";
     
    fichier = fopen (nom.c_str() ,"a+");
    if (fichier==NULL)
    {
    	printf ("Erreur creation fichier : erreur %d\n\n", GetLastError());
     
    }
    else
    {
    	printf ("Creation fichier reussie\n\n");
    }
     
    fprintf (fichier, "%s" , Date.TimeString() );
     
    fclose (fichier);
    Alors bien entendu, le gros problème est que "AnsiString", TDateTime, ... ne sont pas accepter donc je cherche à faire l'équivalent !!!

    Merci d'avance, et à bientôt !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Alors j'ai réussi à inscrire la date et l'heure dans mon fichier !!!

    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
     
    time_t date;
    time(&date);
    char jour,mois,annee;
    struct tm *newDate;
    newDate = localtime(&date);
    jour = newDate->tm_mday;
    mois = newDate->tm_mon;
    annee = newDate->tm_year;
     
    time_t timer1;
    time(&timer1);
    int secondes, minutes, heures;
    struct tm *newTime1;
    newTime1 = localtime(&timer1);
    heures = newTime1->tm_hour;
    minutes = newTime1->tm_min;
    secondes = newTime1->tm_sec;
     
    fichier = fopen (  "fichier.txt" ,"a+");
     
    fprintf (fichier, "%d" , heures   );
    fprintf (fichier, "%d" , minutes   );
    fprintf (fichier, " "  );
    fprintf (fichier, "%d" , jour   );
     
    fclose (fichier);
    Cela fonctionne bien, cependant pour la date je ne voulai pas l'inscrire dans le fichier mais dans le titre (entête) du fichier à la place de "fichier.txt".

    J'ai essayé plusieurs choses et je n'y suis toujours pas arrivé !!!

    Pouvez-vous m'aider svp ???


  3. #3
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    bonjour,

    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
     
     
    time_t date;
    time(&date);
    char jour,mois,annee;
    char lib_date[ TAILLE_BUFFER + 1 ]; /* a toi de calculer la taille qu il te faut (le +1 c est pour le '\0' */
    struct tm *newDate;
    newDate = localtime(&date);
    jour = newDate->tm_mday;
    mois = newDate->tm_mon;
    annee = newDate->tm_year;
     
    time_t timer1;
    time(&timer1);
    int secondes, minutes, heures;
    struct tm *newTime1;
    newTime1 = localtime(&timer1);
    heures = newTime1->tm_hour;
    minutes = newTime1->tm_min;
    secondes = newTime1->tm_sec;
     
    sprintf( lib_date, "%d%d %d.txt", heures, minutes, jour );
     
    fichier = fopen (  lib_date ,"a+");
     
    /* ... */
     
    fclose (fichier);
    Par contre je vois pas une seule ligne de C++, ici.
    tu devrais faire un choix :
    - continuer en C
    - te mettre au C++

    mais faut arreter ca, sinon tu vas tout confondre et pas apprendre grand chose (ou des choses fausses ce qui est bien pire)

    bon courage
    "vaste programme"

  4. #4
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    Cela fonctionne bien, cependant pour la date je ne voulai pas l'inscrire dans le fichier mais dans le titre (entête) du fichier à la place de "fichier.txt".
    Dans ce cas pourquoi créer tu un fichier qui s'appelle "fichier.txt"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier = fopen (  "fichier.txt" ,"a+");
    Si tu remplace "fichier.txt" par la chaine qui contient tes infos ça te créera un fichier avec le bon nom? non ?

    Ps: au passage ton code est du C
    Linux > *

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oui, j'ai essayé mais lorsque je compile il y a une erreur de création de fichier suivi d'une erreur de segmentation !!!

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string chaine = jour + mois + annee + ".gm";
     
    fichier = fopen (  chaine.c_str() ,"a+");
    Je pense bien que je m'y prend mal !!!


  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    Citation Envoyé par befalimpertinent Voir le message
    Ps: au passage ton code est du C
    Non, c'est pire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AnsiString nom = Date.DateString() + "-" + ((buf[4] << 16) + (buf[5] << 8) + buf[6]) + ".gm";
     
    fichier = fopen (nom.c_str() ,"a+");
    ... mélange C et C++ ...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    AH c'est bon, moquez vous pas !!!

    Justement je ne veux pas faire de ça :
    AnsiString nom = Date.DateString() + "-" + ((buf[4] << 16) + (buf[5] << 8) + buf[6]) + ".gm";

    fichier = fopen (nom.c_str() ,"a+");
    Mais le remplacer par un code équivalent qui puisse compiler sous linux !!!


  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    En c, sprintf permet de formater un texte et de le stoquer dans un buffer. (un peu comme printf ou fprintf qui le font pour la sortie standard ou un fichier).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char buffer[64];
    sprintf(buffer, "%d-%d.gm", heure, minutes);
    Pour plus d'info man sprintf.

    en c++, on peut faire la même chose avec les streamstring. Et on manipule les fichiers avec [io]fstream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <sstream>
    #include <fstream>
    using namespace std;
    stringstream ss;
    ss << heures << "-" << minutes << ".gm";
    ofstream fichier(ss.str().c_str());
     
    ...

  9. #9
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    Dans <fstream> tu as les flux de fichier qui permettent d'ouvrir/lire/écrire/fermer les fichiers.
    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
     
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
    int main()
    {
        string s = "mon_fichier.txt";
     
        ifstream ifs; // Lecture
        ifs.open(s.c_str()); // Il faut passer par la version C style
        ifs.close();
     
        ofstream of; // Ecriture
        ofs.open(s.c_str());
        ifs.close();
     
        fstream fs; // Lecture/Ecriture
        fs.open(s.c_str());
        fs.close();
     
        return 0;
    }
    Je crois que tous permettent de lire/écrire, en fonction des options qu'on leur passe, mais ils ont des options par défaut qui diffèrent. Plus de détails sur www.cplusplus.com ; le site est anglais bien sûr, mais il est relativement explicite.

    Par contre je ne connais pas AnsiString et TDateTime ; elles sont dans quelle bibliothèque ?

  10. #10
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    Oui, j'ai essayé mais lorsque je compile il y a une erreur de création de fichier suivi d'une erreur de segmentation !!!

    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string chaine = jour + mois + annee + ".gm";
     
    fichier = fopen (  chaine.c_str() ,"a+");
    Je pense bien que je m'y prend mal !!!

    ben si jour et date et annee sont des int ajouter a une string effectivement ca va pas etre terrible.

    Enfin bon, c'est pas comme si j'avais l impression de poster dans le vent, mais je t ai donner une solution dans mon premier post.
    Pas optimale parce que pas C++ (pour ca voir les sstringstream comme dit plus haut), mais qui fonctionne
    "vaste programme"

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Noxen Voir le message
    Par contre je ne connais pas AnsiString et TDateTime ; elles sont dans quelle bibliothèque ?
    Elles font partie de la vcl. La bibliothèque fournie avec c++ builder.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Elle font partie de la vcl. La bibliothèque fournie avec c++ builder.
    Oui, cela fait partie de la bibliothèque de c++ builder !!!

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    sprintf(buffer, "%d.%d.gm", jour, mois);

    Avec ça, je devrais avoir "6.8.gm", mais je n'ai pas ça, j'obtiens "6.7.gm" !!!




    Comment ça se fait mabu ???

  14. #14
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    Re,

    c est pas mabu, mais c'est parce que les mois partent de 0, et pas de 1 comme on compte généralement.
    "vaste programme"

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    OK, merci BainE !!

    Par contre, par exemple aujourd'hui le 6 aout, il n'y a pas moyen d'avoir "06.08.gm" à la place de "6.8.gm" ???
    Et pour l'année, c'est pareil que pour les mois ???


  16. #16
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    OK, merci BainE !!

    Par contre, par exemple aujourd'hui le 6 aout, il n'y a pas moyen d'avoir "06.08.gm" à la place de "6.8.gm" ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(buffer, "%02d.%02d.gm", jour, mois + 1);

  17. #17
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    Et pour l'année, c'est pareil que pour les mois ???
    The <time.h> header shall declare the structure tm, which shall include at least the following members:

    int tm_sec Seconds [0,60].
    int tm_min Minutes [0,59].
    int tm_hour Hour [0,23].
    int tm_mday Day of month [1,31].
    int tm_mon Month of year [0,11].
    int tm_year Years since 1900.
    int tm_wday Day of week [0,6] (Sunday =0).
    int tm_yday Day of year [0,365].
    int tm_isdst Daylight Savings flag.

  18. #18
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 896
    Points : 1 912
    Points
    1 912
    Par défaut
    Citation Envoyé par mabu Voir le message
    Elles font partie de la vcl. La bibliothèque fournie avec c++ builder.
    Ok merci.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    C'est tout bon ,merci à tous les amis !!!!

    Je poste mon code au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    char titre[255];
    sprintf(titre, "%02d.%02d.%d.gm", jour, mois+1, annee+1900);
    A bientôt !



  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Excusez moi encore, mais j'ai un autre petit soucis : comment faire pour que le fichier que je créé soit dans un autre répertoire que l'application ???

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char titre[255];
    sprintf(titre, "%02d.%02d.%d-%d.gm", jour, mois+1, annee+1900, ((buf[4] << 16) + (buf[5] << 8) + buf[6]) );
     
    fichier = fopen ( titre ,"a+");
    Avec ce code, je créé le fichier dans le même répertoire que l'application, et j'aimerai que ce fichier soit dans le dossier "mesures" !!!!

    Alors en faisant :

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char titre[255];
    sprintf(titre, "\\mesures\\%02d.%02d.%d-%d.gm", jour, mois+1, annee+1900, ((buf[4] << 16) + (buf[5] << 8) + buf[6]) );
     
    fichier = fopen ( titre ,"a+");
    Cela me créé un fichier dans le même répertoire que l'application avec comme entête "\\mesures\\07.08.2008- .... .gm" !!!!

    Comment puis je faire svp ???



+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment insérer un date dans Mysql
    Par glasgow dans le forum JDBC
    Réponses: 2
    Dernier message: 01/07/2009, 08h44
  2. script insérer la date dans le nom de mon fichier
    Par wagui26 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 30/10/2008, 11h30
  3. Comment insérer la date actuelle dans une requête SQL ?
    Par AMINE07 dans le forum Bases de données
    Réponses: 7
    Dernier message: 15/11/2007, 16h47
  4. Comment fait-on pour insérer une date dans un champs DateTime
    Par gibea00 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/01/2007, 01h04
  5. Comment insérer une date dans FireBird/Interbase ?
    Par tipiweb dans le forum Bases de données
    Réponses: 3
    Dernier message: 29/05/2006, 16h54

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