20_删除某个文件夹RemoveDirectory()

删除某个文件夹RemoveDirectory()

思想是RemoveDirectory() 只能删除一个空的目录,如果目录中有子目录或者是子文件的话就会删除失败的。解决的方法是递归的思想,将子文件删除,之后就可以调用这个函数删除一个空的文件夹了。

//删除某个文件夹 如果这个文件夹下面有子目录或者文件,统统删除。
void EnumDeleteFile
(
	/*输入参数*/
	TCHAR* szDir
)
{
	WIN32_FIND_DATA findData;
	TCHAR szDir_[MAX_PATH];
	HANDLE hFind;

	CString szDirCstring(szDir);
	if (szDirCstring.ReverseFind('\\') == szDirCstring.GetLength() - 1) /* 最后一个字符是\ 则做删除处理*/
	{
		szDirCstring.Delete(szDirCstring.GetLength()-1,1);
		SecureZeroMemory(szDir_,sizeof szDir_);
		StringCchCopy(szDir_,MAX_PATH, szDirCstring.GetBuffer());
		StringCchCopy(szDir,MAX_PATH, szDirCstring.GetBuffer());
	}
	else
	{
		SecureZeroMemory(szDir_, sizeof szDir_);
		StringCchCopy(szDir_, MAX_PATH, szDir);
	}
	StringCchCat(szDir_,MAX_PATH,_T("\\*.*"));

	hFind = FindFirstFile(szDir_,&findData);

	if (INVALID_HANDLE_VALUE == hFind)
	{
		//此目录不存在!
		return;
	}

	do
	{
		TCHAR lpSzDirOrFile[MAX_PATH];

		if (!_tccmp(findData.cFileName, _T(".")) || !_tccmp(findData.cFileName, _T("..")))
			continue;

		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
		{
			SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
			StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"),szDir,findData.cFileName);
			EnumDeleteFile(lpSzDirOrFile);
		}
		else
		{
			SecureZeroMemory(lpSzDirOrFile, sizeof lpSzDirOrFile);
			StringCchPrintf(lpSzDirOrFile, MAX_PATH, _T("%s\\%s"), szDir, findData.cFileName);
			wcout << lpSzDirOrFile << endl;

			if (!DeleteFile(lpSzDirOrFile)) 
			{
				if (ERROR_ACCESS_DENIED == GetLastError()) //删除失败的原因,可能是文件是只读文件属性
				{
					 SetFileAttributes(lpSzDirOrFile, FILE_ATTRIBUTE_NORMAL);
					 DeleteFile(lpSzDirOrFile);
				}
			}
		}

	} while (FindNextFile(hFind,&findData));
	FindClose(hFind);


	RemoveDirectory(szDir); 
	
}

int _tmain(int argc,TCHAR* argv)
{

	/*TCHAR* target_dir = _T("D:\\copyDestDirectory");
	TCHAR ugii_root_dir[50] = {0};
	GetEnvironmentVariable(_T("UGII_ROOT_DIR"), ugii_root_dir,50); 
	

	CreateDirectory(_T("D:\\copyDestDirectory"), NULL);
	EnumCopyFile(ugii_root_dir, target_dir);*/
	

	EnumDeleteFile(_T("D:\\copyDestDirectory"));

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值