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

Visual C++ Discussion :

Tri de fichier selon type d'extension et nom


Sujet :

Visual C++

  1. #1
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut Tri de fichier selon type d'extension et nom
    Bonjour,

    J'ai dans mon pc, un dossier qui contient des fichiers de type .txt et qui sont
    enregistrés avec un nom dans lequel figure la date et l'heure à la
    quelle le fichier a été enregistré. De plus ces fichiers ont dans leurs noms deux types de texte TexteA et TexteB.

    En voici un exemple:
    TexteA_20050514_152938_.txt

    Je dois en fait trier dans un dossier le dernier fichier enregistré en
    date et ayant dans son nom le mot "TexteA" et dont la date est la plus
    récente. Et ensuite afficher le contenu de ce fichier dans une listbox.

    La fonction ci-dessous que j'ai faite recupere les noms des fichiers mais sans
    distinction du mot "TexteA", de plus je ne sais pas sortir de la boucle.
    je dois inclure un code pouvant prendre le dernier fichier en date.

    Je pense a utiliser la methode ftLastAccessTime, comment pourrais
    je faire?


    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
     
    int Cmaclasse::Cherche_Affiche_txt()
    {
     
    string chemin;
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
     
    hfind = FindFirstFile ("C:\\dossier\\Donnes\\Resultats\\*.txt", &wfd);
     
    while (hfind!=INVALID_HANDLE_VALUE)
    {
    FindNextFile (hfind,&wfd);
    chemin=wfd.cFileName;
    TRACE ("Next file name is %s\n", wfd.cFileName);
    }
     
    FindClose(hfind);
     
    m_ctrlistnfo.AddString (chemin.c_str()); //ici j'affiche le nom du fichier 
                                                           //seulement
     
     
    return 0;
    }
    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    pourquoi tu fais pas ca déjà ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FindFirstFile ("C:\\dossier\\Donnes\\Resultats\\TexteA*.txt", &wfd);
    ca te selectionnerait tous les fichiers commenceant par texteA

  3. #3
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci,

    pour cette très bonne remarque. Par contre pour la suite
    je ne voit pas trop bien comment je peux faire, j'utiliserai pour bien faire la methode ftLastAccessTime et ensuite creer une boucle qui triera tout et sortira le wfd qui a la plus grande valeur. Quel type de tri et Comment faire, je ne connais pas très bien les tris?

    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
     
     
    int CViewTestStereo::Cherche_Affiche_nfo()
    {
     
    string chemin;
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
     
    CTime tim;
     
    hfind = FindFirstFile ("C:\\dossier\\Donnes\\Photos\\TexteA*.nfo", &wfd);
     
    while (hfind!=INVALID_HANDLE_VALUE)
    {
      FindNextFile (hfind,&wfd);
      chemin=wfd.cFileName;
      TRACE ("Next file name is %s\n", wfd.cFileName);
     
      tim=wfd.ftLastAccessTime;   // recupere le temps 
     
                  // fonction tri ?
    	 // tim=tim;
     
    	 //chemin=wfd.cFileName    //ici on prend la valeur max
     
    }
     
    FindClose(hfind);
     
    m_ctrlistnfo.AddString (chemin.c_str());
     
     
     
    	return 0;
    }

    Encore merci

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu peux utiliser un conteneur qui fait le tri, genre http://c.developpez.com/faq/cpp/?pag...TL_custom_sort

  5. #5
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci,

    Je me rend compte que un tri n'est pas necessaire

    je devrais sequentiellement prendre la date la plus recente et le sauver et faire la comparaison avec le wfd suivant donc j'aurai un if et sans doute mettre ca dans la meem boucle mais comment faire pour en sortir une fois que j'aurais la valeur max?

    voici mon code de comparaison sequentiel:

    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
     
    int CViewTestStereo::Cherche_Affiche_nfo()
    {
    CTime tim;
     
    string chemin;
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
     
     
    hfind = FindFirstFile ("C:\\dossier\\Donnes\\Photos\\TexteA*.nfo", &wfd);
     
    chemin= wfd.cFileName ;
    tim=wfd.ftLastAccessTime;
    while (hfind!=INVALID_HANDLE_VALUE)
    {
     
         FindNextFile (hfind,&wfd);
          if ( tim > wfd.ftLastAccessTime)
          {
              tim=wfd.ftLastAccessTime;
              chemin= wfd.cFileName;
          }
     
     
    }
     
    FindClose(hfind);
     
    m_ctrlistnfo.AddString (sfilename.c_str());
     
    return 0;
     }
    }

    Ci le code ci-dessus est juste, le reste c'est l'affichage du chemin.

    Merci

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    hé bien un simple break; suffit dans ce cas....

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    oui, ou simplement une condition supplémentaire dans la boucle while

  8. #8
    Membre du Club
    Profil pro
    Developer
    Inscrit en
    Juin 2004
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developer

    Informations forums :
    Inscription : Juin 2004
    Messages : 194
    Points : 58
    Points
    58
    Par défaut
    Merci,
    Et j'ai justement fais ça mais je cherche une condition car avec le nouveau code que j'ai, sors des la premiere boucle car en effet je voudrais sortir des que le FindNextFile ne change plus mais ma condition pour la lecture de l'ensemble n'est pas bonne?


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    int CViewTestStereo::Cherche_Affiche_nfo()
    {
    CTime tim;
    CTime tim2;
     
    string chemin;
    HANDLE hfind;
    WIN32_FIND_DATA wfd;
     
     
    hfind = FindFirstFile ("C:\\dossier\\Data\\Photo Fastcom\\FastcomStereo*.nfo", &wfd);
     
    chemin= wfd.cFileName ;
    tim=wfd.ftLastAccessTime;
    while (hfind!=INVALID_HANDLE_VALUE)
    {
     
    	FindNextFile (hfind,&wfd);
    	tim2=wfd.ftLastAccessTime;
    	if ( tim < tim2)
    	{
    	//FindNextFile (hfind,&wfd);
    	tim=wfd.ftLastAccessTime;
     
                 }
     
                 if (tim==tim && tim2==tim2)
    	    break;            
     
     
    }
     
    FindClose(hfind);
     
    m_ctrlistnfo.AddString (chemin.c_str());
     
     
    	return 0;
     
    }
    Merci

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    euh ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (tim==tim && tim2==tim2)
        break;
    t'es sur que ca peut faire quelque chose de bien ca ?

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par nico-pyright(c)
    euh ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (tim==tim && tim2==tim2)
        break;
    t'es sur que ca peut faire quelque chose de bien ca ?
    je n'ai pas regardé le reste du code, mais il a le droit de comparer deux CTime.
    en autre chose tu aurais du utiliser la classe CFileFind au lieu de l'api 32 ...
    (c'est dans la faq).

  11. #11
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par farscape
    je n'ai pas regardé le reste du code, mais il a le droit de comparer deux CTime.
    en autre chose tu aurais du utiliser la classe CFileFind au lieu de l'api 32 ...
    (c'est dans la faq).
    je veux bien qu'il compare 2 Ctime ... mais tu as regardé quels CTime il comparait entre eux ?

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par nico-pyright(c)
    je veux bien qu'il compare 2 Ctime ... mais tu as regardé quels CTime il comparait entre eux ?
    non ,quand on dit aux programmeurs d'utiliser des noms de variables en rapport avec le sujet ce n'est pas pour rien....(ça evite bien des erreurs d'écriture)
    et la effectivement après une seconde d'attention poussée
    comparer des objets sur soi même sera toujours vrai ....

Discussions similaires

  1. [XL-2010] Macro pour nommer un fichier selon un signet ou le nom d'une cellule
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 28/03/2014, 11h40
  2. Tri des fichiers selon le date ?
    Par genius4evers dans le forum C#
    Réponses: 2
    Dernier message: 29/09/2011, 10h27
  3. déplacer des fichiers selon leur extension
    Par chicabonux dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 12/10/2009, 16h42
  4. Réponses: 2
    Dernier message: 19/05/2008, 15h13
  5. [GetOpenFilename]ne montrer que les fichiers du type FinDenom.Extension
    Par mordrhim dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/05/2007, 10h00

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