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 :

Génération de nom de fichier


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 39
    Points
    39
    Par défaut Génération de nom de fichier
    Salut a tous.Voila je cherches à générez automatiquement le nom des fichiers textes dans lesquels j'écris. Par exemple :

    INVE10082005163948.txt

    En gros il y a en premier un code sur 4 lettres representant l'endroit du prog (la par exemple inve pour inventaire) et la date + heure

    Voila comment je m'y prend :

    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
     
    bool CFichier::Ouvrir()
    {
    	TCHAR NomFichier[50];
     
    	TCHAR jour[2], mois[2], annee[4], heure[2], minute[2], seconde[2];
    	TCHAR *pnomfichier = NomFichier;
     
        SYSTEMTIME datesys;
        GetSystemTime(&datesys);
     
    	_ultow(datesys.wDay, jour, 10);
        _ultow(datesys.wMonth, mois, 10);
        _ultow(datesys.wYear, annee, 10);
        _ultow(datesys.wHour, heure,10);
        _ultow(datesys.wMinute, minute, 10);
        _ultow(datesys.wSecond, seconde, 10);
     
    	pnomfichier= m_Type;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= jour;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= mois;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= annee;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= heure;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= minute;
    	while(*pnomfichier) pnomfichier++;
    	pnomfichier= seconde;
    	while(*pnomfichier) pnomfichier++;
        pnomfichier= TEXT(".txt");
     
     
    	if((fichier = _wfopen(NomFichier,TEXT("w"))) != NULL)
    	{
     
    		EcrireTCHAR(TEXT("Debut Dechargement    "));
    		EcrireRetour();
    		return true;
    	}
    	else
    		return false;
    }
    et voila les types de mes chaines en sachant que m_type est un TCHAR m_Type[6];

    Mais visiblement... ca ne marche pas... J'avais essayer avant avec des wcscat mais ca ne marche pas mieux (c'est l'equivalent UNICODE de strcat).

    Est ce que quelqu'un pourrait m'expliquer ou est le prob ?

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    pourquoi tu n'utilises pas CTime ?
    il y a du linge sur la corde à linge

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Disons que je boses sur une machine Win CE qui a son SDK bien a elle... Et je ne peux donc pas utiliser tout ce que je veux... Sinon je ne me ferai pas chier en UNICODE et j'utiliserai des CString

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Apres quelque tests auquels je n'avais pas penser, en fait ca marche... C'est aparement l'endroit ou je l'utilise qui merde...

    En effet, si je l'utilise juste au début de prog, ca marche nickel. Mais quand je l'utilise sur la fermetire d'une fenetre, ca merde...

    Reste plus qu'a trouver pourquoi...

    [edit]

    Grand moment de solitude la... Je n'ai strictement rien modifier et... Ca marche nickel... Bon je vais aller me chercher une corde vite fait :/

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce que tu fais là, c'est parcourir chacune de tes chaînes sans rien faire dessus. Pour concatener, c'est strcat et non un simple =.

    Mais avec un std::ostringstream ce serait bien plus simple.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 39
    Points
    39
    Par défaut


    Oui mais je ne peux toujours pas utiliser le std... SDK de merde...

    Et sinon... Ca marche

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui mais je ne peux toujours pas utiliser le std... SDK de merde...
    Dans ce cas utilise sprintf, ou même strftime + time (ça aura l'avantage d'être portable, même si ça doit être le dernier de tes soucis).

    Avec sprintf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(NomFichier, "%ul%ul%ul%ul%ul%ul%ul.txt", m_Type, datesys.wDay, datesys.wMonth, datesys.wYear, datesys.wHour, datesys.wMinute, datesys.wSecond);
    Pour les TCHAR ça doit être une variation, genre wsprintf.

    Et sinon... Ca marche
    J'ai vraiment du mal à voir par quel miracle, j'ai dû louper un truc

  8. #8
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Citation Envoyé par Raton


    Oui mais je ne peux toujours pas utiliser le std... SDK de merde...

    Et sinon... Ca marche
    Marrant celle là ! Les flux C++ sont portés sous EVC pourtant.

    Pour ne pas t'ennuyer avec l'unicode utilises la macro _T().

  9. #9
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Juste un truc en passant, comme ca, tu stocke ta date dans unSi ça marche comme les char* alors il faut mettre plutot un à cause du '\0'
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 92
    Points : 39
    Points
    39
    Par défaut
    Le carac en plus bonne idée...

    Pour les problemes de Lib... J'avou que j'ai tellement galéré avec ce truc qu'a force je cherches meme plus a utiliser des trucs qui existent déjà...

    Pour vous donner un exemple, toujours sur ma génération de nom... Vers 14h catastrophe, ca ne marche plus... Casiment rien modifier, bizarre... Je remets la sauvegarde de ce matin qui marchait nickel... Ca marche plus

    J'essaie sur un autre TSP(le periph sur lequel je travailles) ca marche... Jer remets sur l'ancien... Ca marche... Et tout ca avec la meme version... Je suis au bord de l'explosion la :p

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La magie des comportements indéterminés.

    A part ça, sprintf ne te paraît vraiment pas plus simple ? Et si finalement tu peux utiliser les flux, c'est encore mieux.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Et est-ce que ceci marche ?

    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
     
    bool CFichier::Ouvrir() 
    { 
       TCHAR NomFichier[50]; 
     
       TCHAR jour[2], mois[2], annee[4], heure[2], minute[2], seconde[2]; 
       TCHAR *pnomfichier = NomFichier; 
     
        SYSTEMTIME datesys; 
        GetSystemTime(&datesys); 
     
       _ultow(datesys.wDay, jour, 10); 
        _ultow(datesys.wMonth, mois, 10); 
        _ultow(datesys.wYear, annee, 10); 
        _ultow(datesys.wHour, heure,10); 
        _ultow(datesys.wMinute, minute, 10); 
        _ultow(datesys.wSecond, seconde, 10); 
     
        swprintf(NomFichier,"INVE%s%s%s%s%s%s.txt",jour,mois,annee,heure,minute,seconde); // ou _stprintf au lieu de sprintf
     
       if((fichier = _wfopen(NomFichier,TEXT("w"))) != NULL) 
       { 
     
          EcrireTCHAR(TEXT("Debut Dechargement    ")); 
          EcrireRetour(); 
          return true; 
       } 
       else 
          return false; 
    }

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu n'as pas besoin de passer par la conversion en chaîne, sprintf est capable de le faire (avec le formateur %ul pour un unsigned long) comme je te l'ai montré précedemment. Et tu es sûr que ce n'est pas plutôt wsprintf, que swprintf ?

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 38
    Points : 40
    Points
    40
    Par défaut
    Dans l'aide MSDN j'ai ceci

    sprintf, swprintf
    Write formatted data to a string.

    int sprintf( char *buffer, const char *format [, argument] ... );

    int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
    ...

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ok ça roule alors.

Discussions similaires

  1. Génération d'un nom de fichier de sortie à partir de donnée d'un tMap
    Par Slyvore dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 10/04/2012, 14h57
  2. Génération de Nom sur fichier a plat
    Par piboula dans le forum BIRT
    Réponses: 2
    Dernier message: 16/08/2010, 18h31
  3. cherche une macro de génération de nom de fichier
    Par cjpneros dans le forum VBA Word
    Réponses: 9
    Dernier message: 21/01/2009, 15h17
  4. Génération de nom de fichier
    Par Respawner dans le forum Général Java
    Réponses: 2
    Dernier message: 23/12/2008, 17h10
  5. Génération automatique de noms de fichiers
    Par 84mickael dans le forum Langage
    Réponses: 7
    Dernier message: 02/05/2008, 09h41

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