gpt4 book ai didi

C 递归搜索文件夹及其子文件夹中的文件

转载 作者:行者123 更新时间:2023-11-30 14:53:14 26 4
gpt4 key购买 nike

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

我不明白的是,如果该文件不存在于基目录中或立即检查该文件的所有子目录,同时保留程序的功能,该如何检查?

  strcpy(oldnp, oldpath);
strcat(oldnp, "/");
strcat(oldnp, get_between_delimiter(commande[cnt] , 0));
strcat(oldnp, ".png");
source = fopen(oldnp, "r");
if ((source = fopen(oldnp, "r")) == NULL)
file_found();
else
;?

最佳答案

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

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

这个例子在"c:\\test"上查找"something.png",如果没有找到,它会在子目录中查找“c:\\测试”

确保不要对“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;
}

关于C 递归搜索文件夹及其子文件夹中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com