我的程序正在从用户那里获取输入路径,并且正在查找名称与.csv文件中的列相对应的文件,其中oldpath
是用户输入路径,然后我正在使用{{ 1}}在while循环中获取我正在从.csv中每行的第一个单元格中查找的文件的名称
我无法弄清楚的是,如果该文件在基本目录中不存在或立即检查该文件的所有子目录,同时保留我的程序的功能?
get_between_delimiter
答案 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;
}