Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Listage des fichiers d'une directory

2 views
Skip to first unread message

Roger

unread,
Aug 4, 2011, 6:08:09 PM8/4/11
to
Bonjour,
Question probablement tr�s simple pour qui l'a d�j� fait. J'essaie de savoir
quels sont tous les fichiers qui se trouvent sous une directory donn�e.
J'utilise (peut-�tre � tort) la fonction:
searchfile= FindFirstFile(repertory, &fileinfo);
avec comme nom de fichier dans repertory:
c:/................/*.*
mais visiblement �a ne doit pas �tre �a car lorsque je regarde le nom du
fichier (contenu de fileinfo.cFileName) je ne trouve qu'un point ".".
Par contre si je fais une recherche en mettant au moins une lettre dans le
nom du fichier (par exemple: t*.*), il me trouve le 1er fichier commen�ant
par "t" (test.txt).
Faut--il utiliser une autre fonction ou bien faut-il mettre autre chose � la
place de "*.*", je ne vais quand m�me pas rechercher avec toutes les lettres
de l'alphabet!
Merci


Christian ASTOR

unread,
Aug 5, 2011, 5:32:06 AM8/5/11
to
Roger a �crit :

> Bonjour,
> Question probablement tr�s simple pour qui l'a d�j� fait. J'essaie de savoir
> quels sont tous les fichiers qui se trouvent sous une directory donn�e.

Vieil exemple Microsoft =>


LPTSTR CheckSlash (__in LPTSTR lpDir)
{
LPTSTR lpEnd;
lpEnd = lpDir + lstrlen(lpDir);

if (*(lpEnd - 1) != TEXT('\\')) {
*lpEnd = TEXT('\\');
lpEnd++;
*lpEnd = TEXT('\0');
}
return lpEnd;
}

BOOL RecurseDir(LPTSTR lpDir, LPTSTR lpExcludeList)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA fd;
LPTSTR lpEnd, lpTemp;
BOOL bResult = TRUE;
BOOL bSkip;

// Setup the ending pointer
lpEnd = CheckSlash (lpDir);

// Append *.* to the source directory
lstrcpy(lpEnd, TEXT("*.*"));

// Search through the source directory
hFile = FindFirstFile(lpDir, &fd);

if (hFile == INVALID_HANDLE_VALUE) {

if ( (GetLastError() == ERROR_FILE_NOT_FOUND) ||
(GetLastError() == ERROR_PATH_NOT_FOUND) ) {

} else {

bResult = FALSE;
}

goto RecurseDir_Exit;
}

do {

// Append the file / directory name to the working buffer
lstrcpy (lpEnd, fd.cFileName);

if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

// Check for "." and ".."
if (!lstrcmpi(fd.cFileName, TEXT("."))) {
continue;
}

if (!lstrcmpi(fd.cFileName, TEXT(".."))) {
continue;
}

// Check if this directory should be excluded
if (lpExcludeList) {
bSkip = FALSE;
lpTemp = lpExcludeList;

while (*lpTemp) {

if (lstrcmpi (lpTemp, lpDir) == 0) {
bSkip = TRUE;
break;
}
lpTemp += lstrlen (lpTemp) + 1;
}

if (bSkip)
continue;
}

// Found a directory.
//
// 1) Change into that subdirectory on the source drive.
// 2) Recurse down that tree.
// 3) Back up one level.

// Recurse the subdirectory
if (!RecurseDir(lpDir, lpExcludeList)) {
bResult = FALSE;
goto RecurseDir_Exit;
}

} else {

// Found a file, add the filesize
g_dwProfileSize += fd.nFileSizeLow;
}

// Find the next entry

} while (FindNextFile(hFile, &fd));


RecurseDir_Exit:

// Remove the file / directory name appended above
*lpEnd = TEXT('\0');

// Close the search handle
if (hFile != INVALID_HANDLE_VALUE) {
FindClose(hFile);
}
return bResult;
}


Roger

unread,
Aug 6, 2011, 4:31:12 AM8/6/11
to
>
> Vieil exemple Microsoft =>
>
>
Merci pour la r�ponse,
J'ai vu, en fait je m'�tais arr�t� trop t�t, il me suffisait de pers�v�rer,
d'ignorer les fichiers "." et ".." et de continuer � boucler sur
FindNextFile() et les bons noms de fichiers arrivent derri�re.
Merci


0 new messages