MFC 刪除文件夾或文件

1、利用API函數SHFileOperation實現的刪除函數,能夠一次刪除目錄及其下面的子目錄和文件 或者 刪除單個的文件:

// 刪除文件(第二個參數bDelete表示是否刪除至回收站,默認刪除到回收站)
BOOL RecycleFileOrFolder(CString strPath, BOOL bDelete/*=FALSE*/)
{
	strPath += '\0';
	SHFILEOPSTRUCT  shDelFile;
	memset(&shDelFile,0,sizeof(SHFILEOPSTRUCT));
	shDelFile.fFlags |= FOF_SILENT;				// 不顯示進度
	shDelFile.fFlags |= FOF_NOERRORUI;			// 不報告錯誤信息
	shDelFile.fFlags |= FOF_NOCONFIRMATION;		// 直接刪除,不進行確認

	// 設置SHFILEOPSTRUCT的參數爲刪除做準備
	shDelFile.wFunc = FO_DELETE;		// 執行的操作
	shDelFile.pFrom = strPath;			// 操作的對象,也就是目錄(注意:以“\0\0”結尾)
	shDelFile.pTo = NULL;				// 必須設置爲NULL
	if (bDelete) //根據傳遞的bDelete參數確定是否刪除到回收站
	{    
		shDelFile.fFlags &= ~FOF_ALLOWUNDO;    //直接刪除,不進入回收站
	} 
	else 
	{           
		shDelFile.fFlags |= FOF_ALLOWUNDO;    //刪除到回收站
	}

	BOOL bres = SHFileOperation(&shDelFile);    //刪除
	return !bres;
}

2、另外,還有通過遞歸逐個刪除的方法:

BOOL DeleteFolderOrFile(CString strPath)
{
	DWORD dwAttr = GetFileAttributes(strPath);  //得到文件屬性 
	BOOL bRes = TRUE;

	if ( dwAttr == 0xFFFFFFFF )    // 文件或目錄不存在
	{
		return FALSE;
	}
	else if ( dwAttr & FILE_ATTRIBUTE_DIRECTORY )
	{
		if ( !DeleteFolder(strPath) )
		{
			bRes = FALSE;
		}
	}
	else
	{
		if ( !DeleteFile(strPath) )
		{
			bRes = FALSE;
		}
	}

	return bRes;
}

BOOL DeleteFolder(CString strPath)
{
	BOOL bRes = TRUE;
	BOOL bTemp;
	CFileFind finder;  
    CString path = strPath + _T("\\*.*");
    BOOL bWorking = finder.FindFile(path);  
    while(bWorking)
	{  
        bWorking = finder.FindNextFile();
		path = finder.GetFilePath();
		if (!finder.IsDots())
		{
			if(finder.IsDirectory())
			{
				bTemp = DeleteFolder(path);		// 遞歸
				bRes = bTemp && bRes ? TRUE : FALSE;
			}  
			else
			{
				bTemp = DeleteFile(path);		// 刪除文件
				bRes = bTemp && bRes ? TRUE : FALSE;
			}
		}  
    }  

	bTemp = RemoveDirectory(strPath);	// 刪除空文件夾
	bRes = bTemp && bRes ? TRUE : FALSE;

	return bRes;
}


3、關於文件屬性的判斷:GetFileAttributes




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章