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 :

Lister contenu répertoire


Sujet :

C++Builder

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut Lister contenu répertoire
    Bonjour,

    Je souhaite créer un petit programme me permettant de choisir un répertoire dont il faut lister le contenu (noms des fichiers dans un premier temps).
    Grâce à la FAQ, je me suis débrouillé et, en changeant un peu le code, j'y suis arrivé. Le programme me permet de spécifier le dossier à utiliser et me liste son contenu dans un fichier qu'il crée. Le soucis est que j'aimerais que cette liste soit ordonnée sur la date de création des fichiers, c'est-à-dire que le premier écrit dans le fichier devra être le fichier le plus vieux, et ainsi de suite jusqu'au plus récemment créé. Je n'ai pas trouvé comment faire, j'espère que vous pourrez me filer un coup de main.
    Voici mon 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
     
    void __fastcall TInterface::Button3Click(TObject *Sender)
    {
            if(SelectDirectory("Choose a directory", "D:\\Documents and Settings\\anonymous\\Bureau", directory))
                    logFileEdit->Text = directory;
    }
     
    void __fastcall TInterface::makeBinButtonClick(TObject *Sender)
    {
            if(directory == "")
                    Application->MessageBox("Choose a directory to analyse please", "ERROR", MB_OK);
            else
            {
                    AnsiString FilePath = logFileEdit->Text;
                    TStrings *ListeFichiers = new TStringList;
     
                    TSearchRec Infos_fichier;
                    if (!FindFirst(FilePath+"\\*.*", faAnyFile, Infos_fichier))
                    {
                            do
                            {
                                    ListeFichiers->Add(Infos_fichier.Name);
                            }
                            while(!FindNext(Infos_fichier));
                    }
                    FindClose(Infos_fichier);
     
                    if(ListeFichiers->Count > 2)
                    {
                            ListeFichiers->SaveToFile("D:\\Documents and Settings\\anonymous\\Bureau\\nameFile.txt");
                            Application->MessageBox("File created", "ERROR", MB_OK);
                    }
                    else
                            Application->MessageBox("There are no files in this directory", "ERROR", MB_OK);
            }
    }
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Utilise TSearchRec.Time, la fonction FileDateToDateTime va te le convertir au besoin, ajoute cette valeur via AddObject au lieu de Add
    Puis appel CustomSort avec une procédure utilisant Object comme critère de comparaison, la fonction CompareDateTime devrait aider à créer ta TStringListSortCompare

    Voir aussi FindData pour Windows, plus précis avec ftCreationTime, ftLastAccessTime et ftLastWriteTime
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Merci pour tes indications, elles me sont utiles bien que je n'arrive toujours pas à mes fins.
    Je n'arrive pas à ajouter un TDateTime via la fonction AddObject de ma TStringList.

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Tenebrous Voir le message
    Je n'arrive pas à ajouter un TDateTime via la fonction AddObject de ma TStringList.
    Il suffit de caster ton TDateTime en (TObject*), non?
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, j'ai fait un petit demo avec deux TDateTimePicker, le temps dans le premier est mis dans le deuxième en passant par un TStringList:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        TStrings *ListeFichiers = new TStringList;
     
        // Ajoute un TDateTime dans un TStringList
        TDateTime* LDateTime1 = new TDateTime(DateTimePicker1->DateTime);
        ListeFichiers->AddObject("Fichier1.txt", (TObject*)LDateTime1);
     
        // Lecture d'un TDateTime à partir d'un TStringList
        TDateTime* LDateTime2 = (TDateTime*)ListeFichiers->Objects[0];
        DateTimePicker2->DateTime = *LDateTime2;
     
        // Il ne faut pas oublier de supprimer les objets TDateTime allouer avec new
     
        delete ListeFichiers;
    Pour tester j'avais mis le code dans l'évènement DateTimePicker1Change.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Ok pour le cast, merci.
    Cependant, j'ai omis de préciser que je travaillais avec C++ Builder 5 et il semble que je n'ai pas accès à la fonction CompareDateTime.
    En gros, mes objets sont présents dans la liste, il ne me reste plus qu'à trouver un moyen de les trier sur la date.

  7. #7
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, est-ce que tu as essayer d'inclure DateUtils.hpp pour utiliser CompareDateTime?
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 65
    Points : 41
    Points
    41
    Par défaut
    Oui mais le problème vient justement du fait que le fichier n'est pas présent dans la version 5 de C++ Builder.

  9. #9
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, Indy possède aussi une fonction CompareDateTime, il suffit d'inclure IdGlobalProtocols.hpp:

    Prototype:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern PACKAGE int __fastcall CompareDateTime(const System::TDateTime ADateTime1, const System::TDateTime ADateTime2);
    Description:
    The return value is less than 0 if ADateTime1 is less than ADateTime2, 0 if ADateTime1 equals ADateTime2, or greater than 0 if ADateTime1 is greater than ADateTime2.
    J'espère que celle-ci se trouve dans la version 5 de C++Builder, sinon il va falloir coder ta propre fonction.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Si ça n'existe pas dans CB5 -ce dont je doute car CB5 a un jeu de fonctions très riche, la fonction a peut être un nom différent.

    Perso, j'utilise les fonctions de l'API Windows pour ça:
    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
    Certes pas avec un TDateTime (avec la structure FILETIME). Ce n'est pas aussi facile que d'appeler CompareDateTime, il faut appeler plusieurs fonctions.
    De mémoire (je n'ai pas le projet sous les yeux): FileTimeToSystemeTime, puis SystemTimeTo?, et enfin CompareFileTime.

    Donc fait une recherche sur :
    - conversion TDateTime vers FILETIME
    - TDateTime CompareFileTime
    Et tu devrais trouver une solution qui fonctionne avec CB5.

Discussions similaires

  1. Lister contenu répertoire dans excel
    Par YLKweb dans le forum VBScript
    Réponses: 12
    Dernier message: 14/09/2014, 20h02
  2. Lister contenu complet répertoire
    Par domibigoudi dans le forum VBA Access
    Réponses: 6
    Dernier message: 04/11/2011, 09h04
  3. Lister contenu d'un répertoire (très simple)
    Par storm85 dans le forum Général Python
    Réponses: 1
    Dernier message: 15/12/2010, 18h10
  4. Lister contenu d'un répertoire
    Par MPEG4 dans le forum POSIX
    Réponses: 31
    Dernier message: 18/06/2008, 13h01
  5. Comment copier et lister un répertoire ?
    Par pepito62 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/05/2005, 20h14

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