1,目的
判断一个文件夹是否为空。
2,原理及实现
遍历文件夹找到除"."和".."以外的目录,就说明不为空。
一,使用Platform SDK的两个函数 FindFirstFile 和 FindNextFile.
形式:HANDLE
FindFirstFile(
LPCTSTR
lpFileName,
LPWIN32_FIND_DATA
lpFindFileData
);
说明:
lpFileNameString,欲搜索的文件名。
lpFindFileDataWIN32_FIND_DATA,接收这个文件信息的结构体。
形式:
BOOL FindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATA lpFindFileData);
说明:
HANDLE hFindFile : 搜索的文件句柄(这里传由FindFirstFile得到的) 函数执行的时候搜索的是此句柄的下一文件。
lpFindFileData :指向一个用于保存文件信息的结构体。
函数:IsFolderEmpty.
BOOL IsFolderEmpty(WCHAR* szPath)
{
WCHAR szFind[MAX_PATH] = {0};
WIN32_FIND_DATA findFileData;
BOOL bRet = TRUE;
wcscpy_s(szFind,MAX_PATH,szPath);
wcscat_s(szFind,MAX_PATH,L"\\*.*"); //这里一定要指明通配符,不然不会读取所有文件和目录
HANDLE hFind = ::FindFirstFileW(szFind, &findFileData);
if (INVALID_HANDLE_VALUE == hFind)
{
return TRUE;
}
while (bRet)
{
//一旦找到\'.\'或"..",则不为空
if (findFileData.cFileName[0] != L\'.\')
{
::FindClose(hFind);
return FALSE;
}
bRet = ::FindNextFileW(hFind, &findFileData);
}
::FindClose(hFind);
return TRUE;
}
二,使用MFC的CFileFind类.
BOOL IsFolderEmpty(CString strPath)
{
CString str = strPath + L"\\*.*";
CFileFind ff;
BOOL bFound;
bFound = ff.FindFile(str.GetString());
while(bFound)
{
bFound = ff.FindNextFile();
if(!ff.IsDots())
{
return FALSE;
}
}
ff.Close();
return TRUE;
}
没找到文件夹也返回真。都是UNICODE字符环境。