我使用这样的代码来枚举子目录着色器中的所有着色器文件:
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
shader_counter = 1;
pclog("searching shader files \n");
hFind = FindFirstFile("shaders\\*.fx", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
pclog("no shader files found \n");
}
else
{
pclog("shader files found \n");
while(hFind!=INVALID_HANDLE_VALUE)
{
pclog("Filename=%s\n",FindFileData.cFileName);
hFind = FindNextFile(hFind, &FindFileData);
shader_counter++;
}
pclog("Exit loop\n");
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
}
但它只输出3个文件中的许多文件和崩溃。我做错了什么?
编辑,这是使用通配符枚举子目录的正确代码,也许有人会觉得它很有用:
HANDLE hFind;
WIN32_FIND_DATA FindFileData;
BOOL found = TRUE;
hFind = FindFirstFile("shaders\\*.fx", &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{ // directory/wildcard not found
}
else
{
while(found)
{
//printf("Filename=%s\n",FindFileData.cFileName);
found = FindNextFile(hFind, &FindFileData);
}
FindClose(hFind);
hFind = INVALID_HANDLE_VALUE;
}
答案 0 :(得分:0)
根据Microsoft文档,FindNextFile
的返回值与FindFirstFile
的返回值不同。 FindNextFile
返回一个布尔值:
...
BOOL found = TRUE;
printf("shader files found \n");
while (found)
{
printf("Filename=%s\n",FindFileData.cFileName);
found = FindNextFile(hFind, &FindFileData);
shader_counter++;
}
printf("Exit loop\n");
FindClose(hFind);
...
(它必须是一个独立的值,否则你会将无效句柄传递给FindClose
。)