Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上用C语言搜索文件_C_Windows_File - Fatal编程技术网

在Windows上用C语言搜索文件

在Windows上用C语言搜索文件,c,windows,file,C,Windows,File,如何在计算机上搜索文件? 也许在寻找某些扩展 我需要遍历所有文件并检查文件名 假设我想查找扩展名为.code的所有文件。使用FindFirstFile()或FindNextFile()函数和递归算法遍历子文件夹。使用FindFirstFile()或FindNextFile()函数和递归算法遍历子文件夹。对于Windows,您可能希望查看和函数。如果要实现递归搜索,可以使用GetFileAttributes()检查文件\属性\目录。如果文件实际上是一个目录,请继续搜索。对于Windows,您需要查

如何在计算机上搜索文件? 也许在寻找某些扩展

我需要遍历所有文件并检查文件名


假设我想查找扩展名为.code的所有文件。

使用
FindFirstFile()
FindNextFile()
函数和递归算法遍历子文件夹。

使用
FindFirstFile()
FindNextFile()
函数和递归算法遍历子文件夹。

对于Windows,您可能希望查看和函数。如果要实现递归搜索,可以使用GetFileAttributes()检查
文件\属性\目录
。如果文件实际上是一个目录,请继续搜索。

对于Windows,您需要查看和函数。如果要实现递归搜索,可以使用GetFileAttributes()检查
文件\属性\目录
。如果该文件实际上是一个目录,请继续搜索。

FindFirstFile()/FindNextFile()将在目录中查找文件列表。通过可能使用的子目录进行递归搜索

要将路径拆分为目录名和文件名,然后使用生成的目录详细信息执行递归目录搜索。

FindFirstFile()/FindNextFile()将执行查找目录中文件列表的任务。通过可能使用的子目录进行递归搜索


将路径拆分为目录名和文件名,然后使用生成的目录详细信息进行递归目录搜索。

FindFirstFile的一个好包装是dirent.h for windows(google dirent.h Toni Ronkko)


FindFirstFile的一个很好的包装器是dirent.h for windows(googledirent.h Toni Ronkko)


“通过解析”是什么意思?通过解析是什么意思?FindFirst/NextFile将告诉您文件的属性;不需要调用GetFileAttributes.FindFirst/NextFile将已经告诉您文件的属性;不需要调用GetFileAttributes。

#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;
}