begin process at 2012 05 30 19:07:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Trier des fichiers d'une ListBox par date de modification


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Trier des fichiers d'une ListBox par date de modification

vendredi 14 mars 2008 à 15:07:36 | Trier des fichiers d'une ListBox par date de modification

cartes1

Membre Club

bonjour
malgré mes recherches sur le forum et sur internet je n'ai pas trouvé le moyen de trier les fichiers d'une ListBox par date de modification en Api Pur (j'utilise C++ Visual Studio6 ). ce code ne m'affiche qu'un seul fichier dans la Listbox et c'est le premier par ordre alphabètique.

Voici mon code:
///////////////////////////////////////////////
// Fonction d'extraction de la date et de l'heure de modification
/****************************************************************************************************/
char* test(FILETIME Temp)
/*****************************************************************************************************/
{
char* Chaine=new char;
SYSTEMTIME stTemp,stLocal;
FileTimeToSystemTime(&Temp,&stTemp);
SystemTimeToTzSpecificLocalTime(NULL,&stTemp,&stLocal);
wsprintf(Chaine,"%02d/%02d/%d %02d:%02d",stLocal.wDay ,stLocal.wMonth ,stLocal.wYear,stLocal.wHour ,stLocal.wMinute );
return Chaine;
}
///////////////////////////////////////////////////////////////////////////////////////
/////   Fonction qui Liste les Fichiers "PDF" par Date de Modification   //////////////////////////////////////
/****************************************************************************************/
void AfficherListeFichiersParDate (char Dossier[MAX_PATH])
/****************************************************************************************/
{
HANDLE hFind;
WIN32_FIND_DATA FindData;
char*  Chaine=NULL;

 // Change de dossier
SetCurrentDirectory (Dossier); 

 // Début de la recherche
 hFind=FindFirstFile ("*.pdf", &FindData); 
 
if (hFind!=INVALID_HANDLE_VALUE)
{
 Chaine = test(FindData.ftLastWriteTime);
      {
  // Si le fichier trouvé n'est pas un dossier mais bien un fichier, on affiche son nom 
  if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
            {
  SendDlgItemMessage(fenetrePrincipale, ID_LISTBOX_PDF, LB_ADDSTRING, 0, (LONG)strcat(Chaine,FindData.cFileName));
            }
  // Fichiers suivants
  while (FindNextFile (hFind, &FindData)) 
      {
Chaine=test(FindData.ftLastWriteTime);
   //if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
       {
   SendDlgItemMessage(fenetrePrincipale, ID_LISTBOX_PDF, LB_ADDSTRING, 0, (LONG)strcat(Chaine,FindData.cFileName));
       }
   }
  }
 // Fin de la recherche
 }
return;
}
////////////////
Merci d'avance.
Cartes1

vendredi 14 mars 2008 à 16:59:53 | Re : Trier des fichiers d'une ListBox par date de modification

BruNews

Administrateur CodeS-SourceS

DEMO avec simplement une listbox sur une dialog.

#include <windows.h>
#include "resource.h"

HWND hlb = 0;

__declspec(naked) DWORD __fastcall bnDatFltFl(LPFILETIME lpft)
{
  __asm {
    mov     edx, [ecx+4]
    mov     eax, [ecx]
    mov     ecx, edx
    shr     eax, 2
    shl     ecx, 30
    shr     edx, 2
    or      eax, ecx
    push    edx
    push    eax
    fild    qword ptr[esp]
    fstp    dword ptr[esp]
    pop     eax
    pop     edx
    ret     0
  }
}

void ListeFichiersParDateModif(char *pdir, char *pfltr)
{
  WIN32_FIND_DATA wfd;
  HANDLE hfl;
  char *pbuf, *d;
  DWORD len, data, v;
  int pos, count;
  SendMessage(hlb, LB_RESETCONTENT, 0, 0);
  len = strlen(pdir);
  if(!len) return;
  len += strlen(pfltr);
  pbuf = (char*) HeapAlloc(GetProcessHeap(), 0, len + 2);
  if(!pbuf) return;
  d = pbuf;
  while(*d = *pdir) {pdir++; d++;}
  if(*(d-1) != '\\') *d++ = '\\';
  strcpy(d, pfltr);
  hfl = FindFirstFile(pbuf, &wfd);
  HeapFree(GetProcessHeap(), 0, pbuf);
  if(hfl == INVALID_HANDLE_VALUE) return;
  count = 0; // NBR ITEMS DANS LISTBOX
goFILES:
  if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) goto nextFL;
  data = bnDatFltFl(&wfd.ftLastWriteTime);
  for(pos = 0; pos < count; pos++) {
    v = SendMessage(hlb, LB_GETITEMDATA, pos, 0);
    if(data <= v) break;
  }
  SendMessage(hlb, LB_INSERTSTRING, pos, (LPARAM) wfd.cFileName);
  SendMessage(hlb, LB_SETITEMDATA, pos, (LPARAM) data);
  count++;
nextFL:
  if(FindNextFile(hfl, &wfd)) goto goFILES;
filesEND: FindClose(hfl);
}

BOOL CALLBACK AppDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
  switch(mssg) {
    case WM_INITDIALOG:
      SetClassLongPtr(hdlg, GCLP_HICON, (long)LoadIcon(0, IDI_APPLICATION));
      hlb = GetDlgItem(hdlg, IDLB_FLS);
      ListeFichiersParDateModif("D:", "*.*");
      return 1;
    case WM_COMMAND:
      if(wParam == IDCANCEL) EndDialog(hdlg, 0);
  }
  return 0;
}


ciao...
BruNews, MVP VC++

samedi 15 mars 2008 à 09:08:30 | Re : Trier des fichiers d'une ListBox par date de modification

cartes1

Membre Club

Bonjour BruNews

Merci beaucoup, ça marche, mais le seul problème est que je voudrais que le premier fichier de la liste soit le dernier fichier enregistré dans le dossier concerné ou bien si c'est trop compliqué mettre en surbrillance ce fichier : en effet je n'arrive pas à récupérer l'index de ce fichier pour pouvoir l'afficher dans un champ edit.
Merci encore
Cartes1

samedi 15 mars 2008 à 09:24:23 | Re : Trier des fichiers d'une ListBox par date de modification

BruNews

Administrateur CodeS-SourceS
void ListeFichiersParDateModif(char *pdir, char *pfltr)
{
  WIN32_FIND_DATA wfd;
  HANDLE hfl;
  char *pbuf, *d;
  DWORD len, data, v;
  int pos, count;
  SendMessage(hlb, LB_RESETCONTENT, 0, 0);
  len = strlen(pdir);
  if(!len) return;
  len += strlen(pfltr);
  pbuf = (char*) HeapAlloc(GetProcessHeap(), 0, len + 2);
  if(!pbuf) return;
  d = pbuf;
  while(*d = *pdir) {pdir++; d++;}
  if(*(d-1) != '\\') *d++ = '\\';
  strcpy(d, pfltr);
  hfl = FindFirstFile(pbuf, &wfd);
  HeapFree(GetProcessHeap(), 0, pbuf);
  if(hfl == INVALID_HANDLE_VALUE) return;
  count = 0; // NBR ITEMS DANS LISTBOX
goFILES:
  if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) goto nextFL;
  data = bnDatFltFl(&wfd.ftLastWriteTime);
  for(pos = 0; pos < count; pos++) {
    v = SendMessage(hlb, LB_GETITEMDATA, pos, 0);
    //if(data <= v) break; // CROISSANT SUR DATE
    if(data >= v) break; // DECROISSANT SUR DATE
  }
  SendMessage(hlb, LB_INSERTSTRING, pos, (LPARAM) wfd.cFileName);
  SendMessage(hlb, LB_SETITEMDATA, pos, (LPARAM) data);
  count++;
nextFL:
  if(FindNextFile(hfl, &wfd)) goto goFILES;
  SendMessage(hlb, LB_SETCURSEL, 0, 0);
  FindClose(hfl);
}

ciao...
BruNews, MVP VC++
samedi 15 mars 2008 à 12:19:28 | Re : Trier des fichiers d'une ListBox par date de modification

cartes1

Membre Club
Réponse acceptée !
Rebonjour BruNews
C'était pourtant logique mais je n'y avais même pas pensé.
Encore un grand Merci pour ton aide sympa et à bientôt.

Cartes1


Cette discussion est classée dans : listbox, chaine, fichiers, finddata, stlocal


Répondre à ce message

Sujets en rapport avec ce message

selection multiple avec openfilename [ par ebooserge ] salut a tous, petit souci: j'ai créé une OPENFILENAME dialog qui est censé sélectionner plusieurs fichiers simultanément. pour un fichier c'est assez Stocker dans un tableau. [ par MorbhAck ] Bonsoir a tous.J'ai un souci au niveau d'un tableau de chaine de caratère.Je voudrais stocker des chaine de caratcère dans le tableauchar *salut[]={"h Aide ListBox MFC [ par katson42 ] Bonjour à tous,je suis en train de réaliser un client FTP, j'ai réussi à afficher les fichiers et dossiers présents dans mon C:/ avec le code suivant Demande d'aide pour faire une chaine de compilation en C [ par wahidkw1 ] Bonjour, Je suis en stage et je cherche à faire une chaîne de compilation C pour processeur ARM sur windows.je dois inclure les fichiers déjà codés [shell]modifier des fichiers [ par hdaly ] Bonjour, j'aimerai ecrire un script shell qui permet de remplacer une chaine A par une chaine B et ce dans un fichier, qq'un aurait il qqe chose a me GRrrrr :'( !! chaines et fichiers [ par watch_3754 ] On se demande pourquoi c'esst la section "Au secours" qui est la plus remplie ^^Voila le probleme, je travaille sur des fichiers qui ne sont pas des t Problême de listbox à cliquer [ par Gendal67 ] Bonsoir à tous,Je viens de chercher en vain depuis je ne sais combien de temps...je suis sans solution alors je me tourne vers vous en espérant qu'un listbox afficher détails fichiers d'un repertoire [ par bougnat83 ] bonjourVisual C++ 6.0, MFCj'arrive à afficher dans une listbox la liste des fichiers contenu dans un repertoire donné avec :::SendMessage(hListBox, LB Lister fichiers dans repertoire [ par chikusa ] Bonjour a tous, Voila mon, problème, j'essaye de lister tous les txt d'un repertoire avec les fonctions FindFirstFile et FindNextFile. Le problème qu ouverture de fichier compresser .arj [ par vercd7am ] Bonjour, j'aurais aime savoir comment ouvrir des fichiers compresses en .arj puis enregistrer les fichiers ailleurs. Ouvrir, lire, parcourir un fichi


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales