c - 用于在具有所需扩展名的目录中递归列出文件名的 Windows C 代码

标签 c winapi directory-structure

我想使用 Windows API 和所需的扩展文件名递归地列出目录内的文件名。

我已经尝试过with this但Shlwapi.h似乎对PathCombine函数不太满意。您能告诉我它是否有效吗?

#include <windows.h>
#include <tchar.h> 
#include <stdio.h>
#include <strsafe.h>
#include "Shlwapi.h"
#pragma comment(lib, "User32.lib")

void FindFilesRecursively(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{
    TCHAR szFullPattern[MAX_PATH];
    WIN32_FIND_DATA FindFileData;
    HANDLE hFindFile;
    // first we are going to process any subdirectories
    PathCombine(szFullPattern, lpFolder,_T("*"));
    hFindFile = FindFirstFile(szFullPattern, &FindFileData);
    if(hFindFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                // found a subdirectory; recurse into it
                PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
                FindFilesRecursively(szFullPattern, lpFilePattern);
            }
        } while(FindNextFile(hFindFile, &FindFileData));
        FindClose(hFindFile);
    }
    // now we are going to look for the matching files
    PathCombine(szFullPattern, lpFolder, lpFilePattern);
    hFindFile = FindFirstFile(szFullPattern, &FindFileData);
    if(hFindFile != INVALID_HANDLE_VALUE)
    {
        do
        {
            if(!(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
            {
                // found a file; do something with it
                PathCombine(szFullPattern, lpFolder, FindFileData.cFileName);
                _tprintf_s(_T("%s\n"), szFullPattern);
            }
        } while(FindNextFile(hFindFile, &FindFileData));
        FindClose(hFindFile);
    }
}

int main()
{

    FindFilesRecursively(_T("E:\\Logstotest"), _T("*.log"));
    return 0;
}

最佳答案

是的,这是一个链接错误:1>task2.obj:错误 LNK2001:无法解析的外部符号 __imp_PathCombineW

http://msdn.microsoft.com/en-us/library/windows/desktop/bb773571%28v=vs.85%29.aspx说你需要链接到它:

#pragma comment(lib, "shlwapi.lib") 放入源代码中。

关于c - 用于在具有所需扩展名的目录中递归列出文件名的 Windows C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22634069/

相关文章:

c - 获取实际函数 LoadLibraryExW 的地址而不是 Stub LoadLibraryExWStub

linux - 如何从命令行更改 Linux/Unix 中的目录结构?

在 Linux 上使用 Redis 编译 C 代码

c++ - 如果在系统范围内禁用,则激活窗口主题

c++ - SH文件操作错误 87

c++ - cmake glob包含同时保留目录结构

c# - dotnet core api 文件夹结构

c++ - IBM MQ 回调函数调用等待某些作业完成

c - "!"中的这段代码中 "Point in Polygon Test"的用途是什么?

c - 如何在 mac OSX 中查找内存使用情况?