我想使用 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/