C递归搜索文件夹和子文件夹中的文件

时间:2017-11-15 11:48:25

标签: c windows

我的程序正在从用户那里获取输入路径,并且正在查找名称与.csv文件中的列相对应的文件,其中oldpath是用户输入路径,然后我正在使用{{ 1}}在while循环中获取我正在从.csv中每行的第一个单元格中查找的文件的名称

我无法弄清楚的是,如果该文件在基本目录中不存在或立即检查该文件的所有子目录,同时保留我的程序的功能?

get_between_delimiter

1 个答案:

答案 0 :(得分:1)

使用FindFirstFile列出目录中的所有文件,然后与每个文件进行比较。或者进行递归搜索并搜索每个子目录。

您也可以调整“通配符”。

此示例在"something.png"上查找"c:\\test",如果找不到,则会查看"c:\\test"

的子目录

确保您不对"C:\"进行递归搜索,因为它会遍历驱动器上的所有文件。

#include <stdio.h>
#include <Windows.h>

int findfile_recursive(const char *folder, const char *filename, char *fullpath)
{
    char wildcard[MAX_PATH];
    sprintf(wildcard, "%s\\*", folder);
    WIN32_FIND_DATA fd;
    HANDLE handle = FindFirstFile(wildcard, &fd);
    if(handle == INVALID_HANDLE_VALUE) return 0;
    do  
    {
        if(strcmp(fd.cFileName, ".") == 0 || strcmp(fd.cFileName, "..") == 0) 
            continue;
        char path[MAX_PATH];
        sprintf(path, "%s\\%s", folder, fd.cFileName);

        if(_stricmp(fd.cFileName, filename) == 0) 
            strcpy(fullpath, path);
        else if(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            findfile_recursive(path, filename, fullpath);
        if(strlen(fullpath))
            break;
    } while(FindNextFile(handle, &fd));
    FindClose(handle);
    return strlen(fullpath);
}

int main(void)
{
    char fullpath[MAX_PATH] = { 0 };
    if(findfile_recursive("c:\\test", "something.png", fullpath))
        printf("found: %s\n", fullpath);
    return 0;
}