Поиск файлов в C на Windows - PullRequest
       27

Поиск файлов в C на Windows

0 голосов
/ 06 апреля 2009

Как искать файлы на компьютере? Может быть, ищет определенные расширения.

Мне нужно перебрать все файлы и проверить имена файлов.

Скажем, я хотел найти все файлы с расширением .code.

Ответы [ 4 ]

3 голосов
/ 06 апреля 2009

Для Windows вам нужно изучить функции FindFirstFile () и FindNextFile () . Если вы хотите реализовать рекурсивный поиск, вы можете использовать GetFileAttributes () для проверки на FILE_ATTRIBUTE_DIRECTORY. Если файл на самом деле является каталогом, продолжайте в нем поиск.

1 голос
/ 07 апреля 2009

Хорошей оболочкой для FindFirstFile является dirent.h для Windows (google dirent.h Тони Ронкко)


#define S_ISREG(B) ((B)&_S_IFREG)
#define S_ISDIR(B) ((B)&_S_IFDIR)

static void
scan_dir(DirScan *d, const char *adir, BOOL recurse_dir)
{
    DIR *dirfile;
    int adir_len = strlen(adir);

    if ((dirfile = opendir(adir)) != NULL) {
        struct dirent *entry;
        char    path[MAX_PATH + 1];
        char    *file;

        while ((entry = readdir(dirfile)) != NULL)
        { 
            struct stat buf;
            if(!strcmp(".",entry->d_name) || !strcmp("..",entry->d_name))
                continue;

            sprintf(path,"%s/%.*s", adir, MAX_PATH-2-adir_len, entry->d_name);

            if (stat(path,&buf) != 0)
                continue;

            file = entry->d_name;
            if (recurse_dir && S_ISDIR(buf.st_mode) )
                scan_dir(d, path, recurse_dir);
            else if (match_extension(path) && _access(path, R_OK) == 0) // e.g. match .code
                strs_find_add_str(&d->files,&d->n_files,_strdup(path));
        }
        closedir(dirfile);
    }
    return;
}
1 голос
/ 06 апреля 2009

Используйте функции FindFirstFile() или FindNextFile() и рекурсивный алгоритм для обхода подпапок.

0 голосов
/ 06 апреля 2009

FindFirstFile () / FindNextFile () выполнит работу по поиску списка файлов в каталоге. Чтобы выполнить рекурсивный поиск по подкаталогам, вы можете использовать _splitpath

, чтобы разделить путь на каталоги и имена файлов, а затем использовать результирующую информацию о каталогах для рекурсивного поиска в каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...