DeleteFile
不带通配符。看起来您需要一个FindFirstFile
//循环将通配符转换为完整文件名列表FindNextFile
。FindClose
#include <windows.h>
#include <pathcch.h>
#pragma comment(lib, "pathcch.lib")
// (In a function now)
WIN32_FIND_DATAW wfd;
WCHAR wszPattern[MAX_PATH];
HANDLE hFind;
INT nDeleted = 0;
PathCchCombine(wszPattern, MAX_PATH, L"C:\\Logs\\Test", L"test_12-12-2018_1*.*");
SetCurrentDirectoryW(L"C:\\Logs\\Test");
hFind = FindFirstFileW(wszPattern, &wfd);
if(hFind == INVALID_HANDLE_VALUE)
{
// Handle error & exit
}
do
{
DeleteFileW(wfd.cFileName);
nDeleted++;
}
while (FindNextFileW(hFind, &wfd));
FindClose(hFind);
wprintf(L"Deleted %d files.\n", nDeleted);
请注意PathCchCombine
,FindFirstFileW
、 和DeleteFileW
都可能失败,并且健壮的代码会检查它们的返回值并适当地处理失败。此外,如果FindNextFileW
返回 0 并且最后一个错误代码不是ERROR_NO_MORE_FILES
,那么它由于实际错误而失败(不是因为没有任何东西可以找到),这也需要处理。
此外,如果您关心速度(您在帖子中关于删除同一目录中的四个文件的示例似乎不需要它),请将该行替换为hFind = FindFirstFileW(...)
:
hFind = FindFirstFileExW(wszPattern, FindExInfoBasic, (LPVOID)&wfd, FindExSearchNameMatch, NULL, FIND_FIRST_EX_LARGE_FETCH);