C++删除一个文件目录下的所有文件及目录

2023-01-11 15:25:59 2305人已围观 28已点赞 25人已收藏

简介本文介绍一个C++代码片段:如何在C++中删除一个文件目录下的所有文件及目录,感兴趣的朋友可以参考一下。

删除一个文件目录下的所有文件及目录

// 删除一个文件目录下的所有文件以及目录
BOOL DoRemoveDirectory(CString chrDirName)
{
	CString strDirName = chrDirName;

	BOOL result;
	HANDLE Handle;
	WIN32_FIND_DATA fData;
	CString strTemp;
	DWORD errorcode;

	Handle = FindFirstFile(strDirName + L"\\*.*", &fData);


	if (Handle == INVALID_HANDLE_VALUE)
	{
		return FALSE;
	}

	do {
		errorcode = GetLastError();

		if (fData.cFileName[0] == '.')
		{
			continue;
		}
		if (fData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
		{
			if (strDirName[strDirName.GetLength() - 1] != '\\')
			{
				TCHAR chA[MAX_PATH];
				CString strA = strDirName + '\\' + fData.cFileName;
				lstrcpy(chA, strA);
				DoRemoveDirectory(chA);
			}
			else
			{
				TCHAR chB[MAX_PATH];
				CString strB = strDirName + fData.cFileName;
				lstrcpy(chB, strB);
				DoRemoveDirectory(chB);
			}
			strTemp = strDirName + L"\\" + fData.cFileName;
			SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY);
			if (!RemoveDirectory(strTemp))
			{
				result = FALSE;
			}
			else
			{
				result = TRUE;
			}
		}
		else
		{
			strTemp = strDirName + L"\\" + fData.cFileName;
			BOOL bl = SetFileAttributes(strTemp, ~FILE_ATTRIBUTE_READONLY);
			if (!DeleteFile(strTemp))
			{
				result = FALSE;
			}
			else
			{
				result = TRUE;
			}
		}
	} while (FindNextFile(Handle, &fData));

	errorcode = GetLastError();
	if (errorcode == ERROR_NO_MORE_FILES)// 空目录
	{
		::RemoveDirectory(strDirName);
		result = TRUE;
	}
	if (Handle)
	{
		FindClose(Handle);
	}
	return result;
}



更多为你推荐