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 :

[BCB5] Classer une liste d'emplacement de fichiers par ordre croissant de date de création de ces fichiers


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de bfespi69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut [BCB5] Classer une liste d'emplacement de fichiers par ordre croissant de date de création de ces fichiers
    Bonjour à tous,

    Je cherche à classer un TStringList contenant des emplacements de fichiers texte ( en local sur le disque dur ) par ordre croissant de date de création de ces fichiers en question.

    exemple :

    une liste de 3 emplacements de fichiers texte

    "C:\\documentC27.txt" -> fichier créé le 8 mars
    "C:\\documentE10.txt" -> fichier créé le 12 avril
    "C:\\documentD33.txt" -> fichier créé le 5 janvier

    Le résultat à obtenir serait

    "C:\\documentD33.txt"
    "C:\\documentC27.txt"
    "C:\\documentE10.txt"

    Voila j'espère que ma demande est claire.
    J'ai essayé de m'inspirer de ça :

    http://cpp.developpez.com/faq/bcb/?p...ttributfichier

    mais je coince un peu. Quelqu'un a une proposition ?

    A bientot.

  2. #2
    Membre éclairé Avatar de getz85
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2008
    Messages
    423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2008
    Messages : 423
    Par défaut
    bon je me suis penché sur ta question, j'ai réussi à faire une petite fonction avec le lien que tu as donné permettant de trier la liste par date.

    tu dois d'abord créer ta fonction qui va servir de fonction de tri :

    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
    int __fastcall TriParDate(TStringList * list,int index1, int index2)
    {
           String item1 = list->Strings[index1];
           String item2 = list->Strings[index2];
           SYSTEMTIME St1,St2;
           double d1,d2;
           WIN32_FILE_ATTRIBUTE_DATA InfoFichier;
     
           //Récupération des infos des fichiers
           ZeroMemory (&InfoFichier, sizeof(WIN32_FILE_ATTRIBUTE_DATA));
    		if ( !GetFileAttributesEx( item1.t_str(), GetFileExInfoStandard, &InfoFichier ))  {
      			return 0;
            }
            FileTimeToSystemTime( &InfoFichier.ftCreationTime, &St1);
            if ( !GetFileAttributesEx(item2.t_str(), GetFileExInfoStandard, &InfoFichier ))  {
      			return 0;
            }
            FileTimeToSystemTime( &InfoFichier.ftCreationTime, &St2);
            //Convertir la date pour la comparaison
            SystemTimeToVariantTime(&St1,&d1);
            SystemTimeToVariantTime(&St2,&d2);
           if (d1 > d2)
              		return 1;
      		else if (d1 < d2)
          		return -1;
      		else
          		return 0;
    };
    Je suis sous C++ builder 2010, sous BCB5, tu devras je pense remplacer item1.t_str() et item2.t_str() par item1.c_str() et item2.c_str() !

    Ensuite tu appelles cette fonction comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListeFichiers->CustomSort(TriParDate);

  3. #3
    Membre confirmé Avatar de bfespi69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut
    Merci encore getz85 d'avoir pris le temps de créer une fonction.
    Je la testerais dans la journée, je te tiens au jus.

  4. #4
    Membre confirmé Avatar de bfespi69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 79
    Par défaut
    Ca a l'air de fonctionner. Je dis bien ça a l'air car je n'ai pas vraiment pu le tester comme je le voudrais.

    En fait cette liste de fichiers est contenue sur le disque dur mais ils viennent tous d'être téléchargés en FTP sur le PC grâce à du code en amont.
    Donc leur date de création est identique car lors d'un transfert FTP la date de création n'est pas celle du fichier du serveur mais celle au moment où le fichier a été téléchargé sur le PC. Le tri se fera selon l'heure de création dans ce cas-là.

    J'ai trouvé une autre solution qui consiste à ajouter au nom du fichier une date au format JJ/MM/AAAA.

    Je récupère la date dans le nom et réalise le tri grâce à cette notion.

    Merci encore getz85, ca pourra me servir dans le futur proche de mon application de toute façon , tu n'as pas recherché en vain.

    A bientot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2016, 19h56
  2. Réponses: 6
    Dernier message: 13/05/2007, 23h14
  3. Réponses: 1
    Dernier message: 04/07/2006, 23h11
  4. classer une liste
    Par Benjiijneb dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 10/02/2006, 19h24
  5. [MFC] Classer une liste a plusieur colonne
    Par Kevgeii dans le forum MFC
    Réponses: 8
    Dernier message: 07/03/2005, 15h09

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