je vous propose ici un code source : "recherche un texte spécifié" dans tous les fichiers texte de votre disque dur, l'utilitaire est Trouve-le ! 1.1il est très facile est utile..
trouvé sur: http://www.atlence.com/index.php?page=prg_sources
Es-ce-que vous pouvez m'aider à modifier le code source pour avoir un programme qui pointe sur une chaîne dans répertoire donné (fichiers .cpp & .hpp)...merci
*************************************
Trouve le.c
*************************************
#include "stdafx.h"
*************************************
results.c
*************************************
#include "stdafx.h"
HWND hWndResults;
// Définit si le dossier spécifié est valide
// Indispensable, pour éviter d'avoir les dossier '.' et '..'
// qui ne ferrait retourner aux dossiers précédents
BOOL DossierValide (WIN32_FIND_DATA * Find)
{
BOOL bReturn=TRUE;
if (!(Find->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
bReturn=FALSE;
if (lstrcmp (Find->cFileName, ".")==0)
bReturn=FALSE;
if (lstrcmp (Find->cFileName,"..")==0)
bReturn=FALSE;
// Vérifie que le fichier réponds au critère (du filtre)
ZeroMemory(&Extension, sizeof(Extension));
for (i=lstrlen(strNomFichier);i>=strlen(strNomFichier)-3;i--,nCount++)
Extension[3-nCount]=strNomFichier[i];
CharLower(Extension);
if (!((lstrcmp(Extension,"txt")==0 && bIsSearchText) || (lstrcmp(Extension,"log")==0 && bIsSearchLog)))
return;
// Recherche les fichiers textes dans le dossier spécifié
// et recherche le texte ds chaque fichier trouvé
void RechercherFichiers (char NomDossier[MAX_PATH])
{
WIN32_FIND_DATA Find;
HANDLE hFind;
BOOL Finished=FALSE;
char NomFichier[MAX_PATH*2];
if (SetCurrentDirectory (NomDossier)==FALSE)
return;
// Recherche premier fichier
hFind=FindFirstFile ("*.*", &Find);
if (hFind==INVALID_HANDLE_VALUE)
{
// pas de fichier
Finished=TRUE;
}
else
{
// Fichier trouvé, recherche le texte
wsprintf (NomFichier, "%s%s", NomDossier,Find.cFileName);
RechercherTexte(NomFichier);
}
// Les autres fichiers
while (!Finished)
{
if (!FindNextFile (hFind, &Find))
// Plus de fichier
Finished=TRUE;
else
{
// Fichier trouvé, recherche le texte
wsprintf (NomFichier, "%s%s", NomDossier,Find.cFileName);
RechercherTexte(NomFichier);
}
}
FindClose (hFind);
}
// Recherche les fichiers textes dans le dossier spécifié
// Cette fonction est récursive, elle s'apelle à chaque fois
// pour évoluer dans la hiérarchie des dossiers
void RechercherDossiers (char NomDossier[MAX_PATH])
{
WIN32_FIND_DATA Find;
HANDLE hFind;
BOOL Finished=FALSE;
char Buffer[MAX_PATH*2];
if (SetCurrentDirectory (NomDossier)==FALSE)
return;
if (NomDossier[lstrlen(NomDossier)-1]!='\\')
lstrcat (NomDossier, "\\");
// Recherche les fichiers textes du dossier
RechercherFichiers(NomDossier);
// Recherche premier sous dossier
hFind=FindFirstFile ("*.", &Find);
if (hFind==INVALID_HANDLE_VALUE)
// Pas de dossier
Finished=TRUE;
else
{
// Récupère le nom du dossier et lance la recherche si le dossier est valide
// c'est à dire que c'est bien un dossier, autre que '.' et '..'
wsprintf(Buffer,"%s%s", NomDossier, Find.cFileName);
if (DossierValide(&Find))
RechercherDossiers(Buffer);
}
// Recherche les autres dossiers
while (!Finished)
{
if (!FindNextFile (hFind, &Find))
// Plus de dossier
Finished=TRUE;
else
{
// Récupère le nom du dossier et lance la recherche si le dossier est valide
// c'est à dire que c'est bien un dossier, autre que '.' et '..'
wsprintf(Buffer,"%s%s", NomDossier, Find.cFileName);
if (DossierValide (&Find))
RechercherDossiers(Buffer);
}
}
FindClose (hFind);
}
BOOL CALLBACK ResultsProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
char strDriveSelected[30];
char strNomFichier[MAX_PATH];
int nPos=0;
int nIndex;
int nCount=0;
int i=0;
switch (uMsg)
{
case WM_INITDIALOG:
nIndex=(int) lParam;
hWndResults=hwndDlg;
// Affiche la fenêtre
ShowWindow (hwndDlg, SW_SHOW);
UpdateWindow(hwndDlg);
if (nIndex==0)
{
// Recherche dans tous les lecteurs
nCount=(int) SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0);
for (i=1;i<nCount;i++)
{
SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETLBTEXT, (WPARAM) i, (LPARAM) (LPCSTR) strDriveSelected);
// On veut que par exemple C:\ et pas C:\ [NOM DU VOLUME]
strDriveSelected[3]='\0';
RechercherDossiers (strDriveSelected);
}
}
else
{
// Recherche dans le lecteur spécifié
SendDlgItemMessage (hWndMain, IDC_LECTEURS, CB_GETLBTEXT, (WPARAM) nIndex, (LPARAM) (LPCSTR) strDriveSelected);
// On veut que par exemple C:\ et pas C:\ [NOM DU VOLUME]
strDriveSelected[3]='\0';
RechercherDossiers (strDriveSelected);
}
SetDlgItemText (hwndDlg, IDC_MESSAGEFIN, "Le programme a trouvé le texte spécifié dans le(s) fichier(s) suivant(s).\n\nSélectionnez un fichier et cliquez sur Ouvrir pour visualiser le fichier.");
return TRUE;
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDC_LISTE:
if (SendDlgItemMessage (hwndDlg, IDC_LISTE,LB_GETCURSEL,(WPARAM) NULL, (LPARAM) NULL)!=LB_ERR)
EnableWindow (GetDlgItem (hwndDlg, IDC_OUVRIR), TRUE);
return TRUE;
case WM_CLOSE:
EndDialog (hwndDlg, IDOK);
return TRUE;
}
return FALSE;
}
C++ recherche un texte spécifié....!!!!
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.