どのようにしてコンピュータ上のファイルを検索しますか? 特定の拡張機能を探している可能性があります。WindowsのCでファイルを検索する
すべてのファイルを繰り返し処理し、ファイル名を調べる必要があります。
私は拡張子が.codeのファイルをすべて探したかったと言います。
どのようにしてコンピュータ上のファイルを検索しますか? 特定の拡張機能を探している可能性があります。WindowsのCでファイルを検索する
すべてのファイルを繰り返し処理し、ファイル名を調べる必要があります。
私は拡張子が.codeのファイルをすべて探したかったと言います。
FindFirstFile()
またはFindNextFile()
関数と再帰アルゴリズムを使用してサブフォルダを走査します。
Windowsの場合、FindFirstFile()とFindNextFile()の機能を調べることをお勧めします。再帰的な検索を実装する場合は、GetFileAttributes()を使用してFILE_ATTRIBUTE_DIRECTORY
をチェックできます。ファイルが実際にディレクトリの場合は、検索を続行します。
FindFirst/NextFileはすでにファイルの属性を通知します。 GetFileAttributesを呼び出す必要はありません。 –
FindFirstFile()/ FindNextFile()は、ディレクトリ内のファイルのリストを検索する際にジョブを実行します。サブディレクトリを再帰的に検索するには、パスをディレクトリとファイル名に分割し、その結果のディレクトリの詳細を使用して再帰的なディレクトリ検索を実行することがあります(_splitpath
)。あなたは "を解析" によって
FindFirstFileのための素晴らしいラッパーはWindows用のdirent.hである(dirent.hトニRonkkoグーグル)
#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;
}
何を意味するのですか? –