От MSDN:
Если вы ссылаетесь на фрагменте кода на этой странице:
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
void _tmain(int argc, TCHAR *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
if(argc != 2)
{
_tprintf(TEXT("Usage: %s [target_file]\n"), argv[0]);
return;
}
_tprintf (TEXT("Target file is %s\n"), argv[1]);
hFind = FindFirstFileEx(argv[1], FindExInfoStandard, &FindFileData,
FindExSearchNameMatch, NULL, 0);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("FindFirstFileEx failed (%d)\n", GetLastError());
return;
}
else
{
_tprintf (TEXT("The first file found is %s\n"),
FindFileData.cFileName);
FindClose(hFind);
}
}
Вы увидите, что вы можете назвать FindFirstFileEx, где ARGV 1 является строкой (LPCSTR) модель для искать, и & FindFileData - это структура данных, содержащая информацию о файлах найденных данных. hFind - это дескриптор, который вы используете при последующих вызовах с FindNextFile .. Я думаю, вы также можете добавить дополнительные параметры поиска, используя четвертый и шестой параметр для FindFirstFileEx.
Удачи вам!
EDIT: Кстати, я думаю, вы можете проверить файл или атрибуты Dir путем использования GetFileAttributes() .. Просто передайте имя файла найденную в FileFindData .. (имя файла может относиться к имени файла или имя каталога, я думаю)
EDIT: MrVimes, вот что вы могли бы сделать (в псевдокоде)
найти первый файл (матч с *)
- Проверьте файл найти данные, если это, ".. "("." это не справочники или файлы)
- Если проверка прошла, проверьте файл, чтобы найти данные, если у него есть атрибуты, которые вы ищете (т. проверьте имя файла, атрибуты файла, даже файл время создания можно проверить в файле найти данные, а что нет), и делать все, что с ним
- если проверка прошла, делать все, что вам нужно сделать с файлом
- , если проверка не удалась, либо вызвать FindNextFile или конец, к вам
Нечто подобное ..
Право, это в значительной степени то, что я уже делаю с функцией findfirst. Поэтому я думаю, что ничего не добьюсь, используя другую функцию. Я надеялся на то, что было разработано для фильтрации для меня (поэтому было бы более эффективно). Наверное, я буду придерживаться. спасибо в любом случае :) – MrVimes
Я не думаю, что это правильно .. FindFirstFile возвращает, когда находит первый файл, который соответствует вашему критерию. Думаю, – krebstar
это немного сложно объяснить. если я укажу критерии в первом параметре (например, «c: \ asampledir \ *. doc»), то он не найдет каталоги, поэтому он не позволит окружающему коду искать в подкаталогах, так как окружающий код ждет файл должен быть рекурсивно, а затем работает рекурсивно – MrVimes