WIN32_FIND_DATA
est un struct. Découvrez le membre cFileName
.
Par exemple:
WIN32_FIND_DATA FindData = {0};
HANDLE hFind = FindFirstFile(pszPattern, &FindData);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
PTSTR pszFileName = FindData.cFileName;
// TODO: Use pszFileName in some way...
} while (FindNextFile(hFind, &FindData));
FindClose(hFind);
}
mise à jour en réponse aux commentaires
Dans cet exemple, le stockage de la chaîne est sur la pile, et le même tampon est utilisé pour chaque appel. Cela signifie que chaque FindNextFile()
écrase la chaîne précédente. Vous devrez faire une copie de la chaîne.
Puisque vous utilisez C++ et classes std
je vous suggère de le stocker dans std::string
(ou mieux encore, assurez-vous de définir UNICODE
et _UNICODE
et utilisez wstring
.) L'initialisation d'une nouvelle classe string
fera l'allocation et la copie sur votre nom.
vous pouvez également copier la chaîne en utilisant les techniques classiques de C (par exemple: en utilisant malloc
+ memcpy
, strdup
, ou similaire), mais il semble que vous voudrez peut-être un rappel dans les chaînes, les pointeurs et l'allocation de mémoire en C avant vous arrivez à ça. Soit dit en passant - pour vérifier l'erreur, votre code compare la poignée de recherche contre NULL
; Ceci est une erreur. FindFirstFile()
renvoie INVALID_HANDLE_VALUE
(ce qui correspond à (HANDLE)-1
) en cas d'échec. En outre, pour fermer la poignée, vous devez utiliser FindClose()
et non CloseHandle()
. (Un "handle de recherche" n'est pas vraiment un handle pour un objet noyau dans le même sens qu'un handle de fichier, un handle vers un module, ou un thread ou un handle de processus est.Ils ont juste surchargé le type.)
Quel matériau de référence utilisez-vous? S'il mentionne ce type de données mais ne décrit pas son contenu, alors nous devrions faire une note pour ne jamais recommander cette ressource à d'autres. Vous devriez envisager d'utiliser MSDN. –