WIN32编程:判断一个目录是否为空目录(不存在任何文件和子目录)的方法
#include <windows.h>
bool is_empty_directory(const wchar_t *path)
{
if (path == nullptr || path[0] == '\0')
return false;
const unsigned buffer_size(512);
wchar_t *fullpath = new wchar_t[buffer_size];
if (fullpath == nullptr)
return false;
bool is_empty = false;
WIN32_FIND_DATAW data;
HANDLE hfind;
DWORD len = ::GetFullPathNameW(path, buffer_size, fullpath, NULL);
if (len <= 0 || len >= buffer_size)
{
is_empty = false;
goto end;
}
if (len > 0 && fullpath[len - 1] != '\\')
{
fullpath[len++] = '\\';
}
fullpath[len++] = '*';
fullpath[len] = '\0';
hfind = ::FindFirstFileW(fullpath, &data);
if (hfind != NULL && hfind != INVALID_HANDLE_VALUE)
{
is_empty = true;
do
{
const wchar_t *n = data.cFileName;
if ((n[0] == '.' && n[1] == '\0') ||
(n[0] == '.' && n[1] == '.' && n[2] == '\0'))
{
continue;
}
is_empty = false;
break;
} while (::FindNextFileW(hfind, &data));
::FindClose(hfind);
hfind = NULL;
}
else
{
is_empty = false;
}
end:
delete[] fullpath;
fullpath = nullptr;
return is_empty;
}