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

MFC Discussion :

[CListCtrl] Tri de fichiers


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre exp�riment� Avatar de Rupella
    Inscrit en
    F�vrier 2005
    Messages
    286
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 286
    Par d�faut [CListCtrl] Tri de fichiers
    Avez vous eja essay� de faire un tri d'une liste de fichiers selon une date.
    Les fichiers sont ajout�s un a un en utilisant la date de creation.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    SYSTEMTIME localTime, fileTime
    FileTimeToSystemTime(&fileTime, fileFindData.ftLastWriteTime);
    SystemTimeToTzSpecificLocalTime(NULL, &fileTime, &localTime);
     
    m_ctlSeq.SetItemData(nItem, (DWORD_PTR)&localTime);
    ...
     
    m_ctlSeq.SortItems(MyCompareProc, 0);
    Avec la proc�dure 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
    static int CALLBACK  MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
    {
      SYSTEMTIME  * time1 = (SYSTEMTIME*) lParam1;
      SYSTEMTIME  * time2 = (SYSTEMTIME*) lParam2;
     
      if ( memcmp(time1, time2, sizeof(SYSTEMTIME)) == 0 ) return 0;
     
      if ( (time1->wYear < time2->wYear) || (time1->wMonth < time2->wMonth) || (time1->wDay < time2->wDay) ||
           (time1->wHour < time2->wHour) || (time1->wMinute < time2->wMinute) || (time1->wSecond < time2->wSecond) )
      {
        if ( lParamSort == 0 ) { return -1; }
        else  { return 1; }
      }
      else if ( lParamSort == 0 )  { return 1; }
      else { return -1; }
     
    }
    Mais il m'est impossible de faire un tri correct. j'ai essay� plein de solutions...

    avez vous une meilleure solution ? merci d'avance !

  2. #2
    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
    Par d�faut
    moi je convertirai les deux dates en chaine de caracteres ou objets CString.
    en mettant dans l'ordre: l'ann�e le mois le jour.
    apres tu renvois le retour de strcmp des deux chaines suivant les cas...

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    391
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 391
    Par d�faut
    Bonjour

    Ta fonction de comparaison de date n'est pas correct.

    Tu peux changer tes SYSTEMTIME en FILETIME puis utiliser la fonction CompareFileTime pour faire la comparaison
    http://msdn.microsoft.com/library/de...refiletime.asp

    cordialement

  4. #4
    Membre exp�riment� Avatar de Rupella
    Inscrit en
    F�vrier 2005
    Messages
    286
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 286
    Par d�faut
    Farscape :
    j'ai essay� plein de solutions possibles, en passant par le nom du fichier puis faire un CFile::GetStatus().

    J'ai essay� la solution propos�e par ricky...
    pour l'instant, ca ne semble pas marcher... le r�sultat est le m�me quelque soit ma valeur de lParamSort :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      FILETIME * time1 = (FILETIME *) lParam1;
      FILETIME * time2 = (FILETIME *) lParam2;
     
      long result = CompareFileTime(time1, time2);
     
      if ( lParamSort == 0 )
        return -result;
      return result;
    En fait, je crois que le mieux, c'est d'avoir une repr�sentation num�rique de la date et de l'heure, en passant par un long par exemple... y a t il quelque chose qui permette ca ?

    [edit] je vais devenir gaga avec leurs fonctions sur les heures...
    RtlTimeToSecondsSince1970() et consors

    [edit2] la doc MFC parle de 32-bit value qui est fournie a SetItemData().
    je peux bien passer un ULARGE_INTEGER *, non ?

  5. #5
    Membre chevronn�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par d�faut
    Citation Envoy� par Rupella
    En fait, je crois que le mieux, c'est d'avoir une repr�sentation num�rique de la date et de l'heure, en passant par un long par exemple... y a t il quelque chose qui permette ca ?

    [edit] je vais devenir gaga avec leurs fonctions sur les heures...
    RtlTimeToSecondsSince1970() et consors
    Inutile de r�inventer la roue,

    la classe CTime impl�mente tous les op�rateurs de comparaison :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
      CTime t1 (* reinterpret_cast<const FILETIME*> (lParam1));
      CTime t2 (* reinterpret_cast<const FILETIME*> (lParam2));
     
      if (t1 == t2)
        return 0;
      else
        return (t1 < t2 ? - 1 : 1);

  6. #6
    Membre exp�riment� Avatar de Rupella
    Inscrit en
    F�vrier 2005
    Messages
    286
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2005
    Messages : 286
    Par d�faut
    Ca ne fonctionne pas non plus
    Par exemple pour deux valeurs que je stocke, elles sont diff�rentes, mais lors de l'appel � la fonction de tri, lParam1 et lParam2 sont identiques...

  7. #7
    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
    Par d�faut
    bon je viens de faire une recherche dans mes codes la solution de ricky doit fonctionner j'ai un code similaire.
    tu dois te planter sur ton InsertItem en precisant le itemdata...

Discussions similaires

  1. Tri de fichier selon type d'extension et nom
    Par Aliveli dans le forum Visual C++
    R�ponses: 11
    Dernier message: 17/11/2006, 11h35
  2. tri de fichier
    Par sondess dans le forum C
    R�ponses: 6
    Dernier message: 17/10/2006, 14h34
  3. Tri de fichier avec le "sort"
    Par LFC dans le forum Langage
    R�ponses: 1
    Dernier message: 08/03/2006, 07h55
  4. Tri de fichier
    Par difficiledetrouver1pseudo dans le forum Linux
    R�ponses: 2
    Dernier message: 22/02/2006, 16h47
  5. [langage] tri de fichier
    Par jj77 dans le forum Langage
    R�ponses: 7
    Dernier message: 16/11/2004, 16h35

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