您的位置:首页 > 其它

利用FindFirstFile和FindNextFile查找文件或遍历文件夹

2014-01-13 15:37 639 查看
FindFirstFile()根据文件名查找文件,函数执行成功返回一个搜索句柄,出错则返回INVALID_HANDLE_VALUE常数,查找结束应该用FindClose函数关闭搜索句柄。函数原型:

HANDLE WINAPI FindFirstFile(
  _In_   LPCTSTR lpFileName,
  _Out_  LPWIN32_FIND_DATA lpFindFileData
);

lpFileName为欲搜索的文件名。格式可如下:

void EmptyDirectory(CString strPath)//参数为要遍历的文件夹路径eg:"D:\\测试"
{
	CString filePath;
	filePath = strPath + _T("\\*");
	WIN32_FIND_DATA findFileData;

	HANDLE hFind = ::FindFirstFile(filePath, &findFileData); 
	if (INVALID_HANDLE_VALUE == hFind)
	{
		AfxMessageBox(_T("findfirst failed."));
		return;
	}

	CString strFileNameTemp;
	BOOL bRet = FALSE;
	while(1)
	{

		if (findFileData.cFileName[0] != _T('.'))//.和..为当前目录和父目录的快捷方式
		{
			strFileNameTemp = strPath + _T("\\") + findFileData.cFileName;
			
			if(findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)//是一个目录
			{
				EmptyDirectory(strFileNameTemp);
				
				if(!RemoveDirectory(strFileNameTemp))
					GetErrorInfo(_T("delete"));
			}
			else
			{
				if(!DeleteFile(strFileNameTemp))
					GetErrorInfo(_T("delete"));
			}
		}
		
		bRet = ::FindNextFile(hFind, &findFileData);
		if (!bRet)
		{
			break;
		}	
	}

	 ::FindClose(hFind);
}

GetErrorInfo()函数为自定义的获得出错信息函数,请参考上一篇文章。

文章出处:http://baike.baidu.com/link?url=DxvpykBeeJxMOeWj39T8XeisYrpZ9vl6Apyi1zr-CA4Q4Jj80gjJotKZ8Is242i76N4PPaeyBfWaTwvBcA_56K

参考文章:http://www.cnblogs.com/chenkunyun/archive/2012/03/24/2415727.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: