【路径相关方法】2,判断文件夹是否为空

1,目的


判断一个文件夹是否为空。


2,原理及实现

遍历文件夹找到除"."和".."以外的目录,就说明不为空。


一,使用Platform SDK的两个函数 FindFirstFile 和 FindNextFile.


形式:
HANDLEFindFirstFile(LPCTSTRlpFileName,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字符环境。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值