Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Непонятка с FILE_ATTRIBUTE_DIRECTORY

292
19 января 2004 года
Matush
726 / / 14.01.2004
Моей программе нужно найти все файлы в заданном каталоге, для этого я ищу их очень просто с помощью FindFirstFile и т.д. при нахождении каталога функция должна-бы была залесть в ету папку и искать дальше. Для проверке на каталог я использую if(w32fd.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY), но это уловий почему-то не выполняется, а w32fd.dwFileAttributes принимает значение 48(десятичное).
Все это под 2000.

В чем-же глюк? Если кто знает более лучший способ поиска, то напишите.
[email]Matush2002@Mail.ru[/email]
2.6K
21 января 2004 года
Hearse
89 / / 19.01.2004
FILE_ATTRIBUTE_DIRECTORY - это не значене всей переменной а только флаг, правильно так
Код:
void PrintDir(char *parm)
{
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind;

    char buffer[MAX_PATH];
    char path[MAX_PATH];
   
    strcpy(path, parm);
    strcat(path, "*.*");

    hFind = FindFirstFile(path, &FindFileData);

    do
    {
        //Интересный момент - может я и дурак но он находит еще папку "."
        //это сама папка parm,
        //и ".." это родительская папка, если убрать условие то рекурсия зациклится
        if (!strcmp(FindFileData.cFileName, ".") || !strcmp(FindFileData.cFileName, ".."))
            continue;
       
        //тут в условии именно & а не == потому как FILE_ATTRIBUTE_DIRECTORY это флаг
       
        if (FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
        {
            strcpy(buffer, parm);
            strcat(buffer, FindFileData.cFileName);
            printf("%s\n", buffer);
            strcat(buffer, "\\");
            PrintDir(buffer);
        }
        else
        {
            strcpy(buffer, parm);
            strcat(buffer, FindFileData.cFileName);
            printf("%s\n", buffer);
        }  
    }while(FindNextFile(hFind, &FindFileData));

    FindClose(hFind);
}
З.Ы. может можно лучше и проще...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог