我想遞歸列出使用帶所需擴展名文件名的windows API的目錄內的文件名。windows c代碼遞歸地列出文件名在一個具有所需擴展名的目錄內
我試過了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;
}
請詳細說明「Shlwapi.h似乎不適合功能PathCombine」 – fritzone
問題是什麼?它不會編譯?它會崩潰嗎?你沒有得到預期的產出?要麼... ?順便說一句:你應該寫''而不是''Shlwapi.h''和'#pragma comment(lib,「Shlwapi.lib」)''可能有幫助。 –
你應該從遞歸中排除'.'和'..',否則它永遠不會結束。 – Ryzhehvost