FindFirstFile
を使用して、ディレクトリ内のすべてのファイルを一覧表示し、各ファイルと比較します。または、再帰的な検索を行い、各サブディレクトリを検索します。
「ワイルドカード」も調整できます。
この例では、それはそれを見つけられない場合、それはそれが通過するために起こっているので、あなたが"C:\"
に再帰的な検索を実行しないことを確認してください"c:\\test"
のサブディレクトリになります、"c:\\test"
に"something.png"
を探しますドライブ上のすべてのファイル。
#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;
}
ありがとうございます、今すぐ実装しようとしているようです。 –