vc中删除文件夹以及文件夹中的内容的三种方法
来源:互联网 发布:天猫魔盒用什么软件 编辑:程序博客网 时间:2024/05/16 01:40
BOOL CDeleteFolderDlg::DeleteFolder(CString lpszPath)//删除文件夹以及文件夹内的文件
{
CHAR szFromPath[_MAX_PATH];//源文件路径
memcpy(szFromPath, lpszPath, lpszPath.GetLength());
szFromPath[lpszPath.GetLength() + 1] = '\0';//必须要以“\0\0”结尾,不然删除不了
szFromPath[lpszPath.GetLength() + 2] = '\0';
SHFILEOPSTRUCT FileOp;
SecureZeroMemory((void*)&FileOp, sizeof(SHFILEOPSTRUCT));
//secureZeroMemory和ZeroMerory的区别
//根据MSDN上,ZeryMerory在当缓冲区的字符串超出生命周期的时候,
//会被编译器优化,从而缓冲区的内容会被恶意软件捕捉到。
//引起软件安全问题,特别是对于密码这些比较敏感的信息而说。
//而SecureZeroMemory则不会引发此问题,保证缓冲区的内容会被正确的清零。
//如果涉及到比较敏感的内容,尽量使用SecureZeroMemory函数。
FileOp.fFlags = FOF_NOCONFIRMATION;//操作与确认标志
FileOp.hNameMappings = NULL;//文件映射
FileOp.hwnd = NULL;//消息发送的窗口句柄;
FileOp.lpszProgressTitle = NULL;//文件操作进度窗口标题
FileOp.pFrom = szFromPath;//源文件及路径
FileOp.pTo = NULL;//目标文件及路径
FileOp.wFunc = FO_DELETE;//操作类型
return SHFileOperation(&FileOp) == 0;
}
bool CDeleteFolderDlg::DeleteDirectory(CString DirName)
{
//AfxMessageBox("执行删除文件夹:" + DirName);
CString PUBPATH;
PUBPATH = DirName;
CFileFind tempFind;
DirName += "\\*.*";
BOOL IsFinded = (BOOL)tempFind.FindFile(DirName);
while(IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
CString strDirName;
strDirName += PUBPATH;
strDirName += "\\";
strDirName += tempFind.GetFileName();
//AfxMessageBox("strDirName :" + strDirName);
if(tempFind.IsDirectory())
{
//strDirName += PUBPATH;
DeleteDirectory(strDirName);
}
else
{
SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
DeleteFile(strDirName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(PUBPATH))
{
return false ;
}
//AfxMessageBox("文件夹删除成功...");
return true;
}
//方法二
bool CDeleteFolderDlg::DeleteDirectory( char* DirName)
{
HANDLE hFirstFile = NULL;
WIN32_FIND_DATA FindData;
char currdir[MAX_PATH] = {0};
sprintf_s(currdir, "%s\\*.*", DirName);
hFirstFile = ::FindFirstFile(currdir, &FindData);
if( hFirstFile == INVALID_HANDLE_VALUE )
return false;
BOOL bRes = true;
while(bRes)
{
bRes = ::FindNextFile(hFirstFile, &FindData);
if( (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //发现目录
{
if( !strcmp(FindData.cFileName, ".") || !strcmp(FindData.cFileName, "..") ) //.或..
continue;
else
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
DeleteDirectory(tmppath);
}
}
else //发现文件
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
::DeleteFile(tmppath);
}
}
::FindClose(hFirstFile);
if(!RemoveDirectory(DirName))
{
return false ;
}
return true;
}
{
CHAR szFromPath[_MAX_PATH];//源文件路径
memcpy(szFromPath, lpszPath, lpszPath.GetLength());
szFromPath[lpszPath.GetLength() + 1] = '\0';//必须要以“\0\0”结尾,不然删除不了
szFromPath[lpszPath.GetLength() + 2] = '\0';
SHFILEOPSTRUCT FileOp;
SecureZeroMemory((void*)&FileOp, sizeof(SHFILEOPSTRUCT));
//secureZeroMemory和ZeroMerory的区别
//根据MSDN上,ZeryMerory在当缓冲区的字符串超出生命周期的时候,
//会被编译器优化,从而缓冲区的内容会被恶意软件捕捉到。
//引起软件安全问题,特别是对于密码这些比较敏感的信息而说。
//而SecureZeroMemory则不会引发此问题,保证缓冲区的内容会被正确的清零。
//如果涉及到比较敏感的内容,尽量使用SecureZeroMemory函数。
FileOp.fFlags = FOF_NOCONFIRMATION;//操作与确认标志
FileOp.hNameMappings = NULL;//文件映射
FileOp.hwnd = NULL;//消息发送的窗口句柄;
FileOp.lpszProgressTitle = NULL;//文件操作进度窗口标题
FileOp.pFrom = szFromPath;//源文件及路径
FileOp.pTo = NULL;//目标文件及路径
FileOp.wFunc = FO_DELETE;//操作类型
return SHFileOperation(&FileOp) == 0;
}
bool CDeleteFolderDlg::DeleteDirectory(CString DirName)
{
//AfxMessageBox("执行删除文件夹:" + DirName);
CString PUBPATH;
PUBPATH = DirName;
CFileFind tempFind;
DirName += "\\*.*";
BOOL IsFinded = (BOOL)tempFind.FindFile(DirName);
while(IsFinded)
{
IsFinded = (BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
CString strDirName;
strDirName += PUBPATH;
strDirName += "\\";
strDirName += tempFind.GetFileName();
//AfxMessageBox("strDirName :" + strDirName);
if(tempFind.IsDirectory())
{
//strDirName += PUBPATH;
DeleteDirectory(strDirName);
}
else
{
SetFileAttributes(strDirName, FILE_ATTRIBUTE_NORMAL); //去掉文件的系统和隐藏属性
DeleteFile(strDirName);
}
}
}
tempFind.Close();
if(!RemoveDirectory(PUBPATH))
{
return false ;
}
//AfxMessageBox("文件夹删除成功...");
return true;
}
//方法二
bool CDeleteFolderDlg::DeleteDirectory( char* DirName)
{
HANDLE hFirstFile = NULL;
WIN32_FIND_DATA FindData;
char currdir[MAX_PATH] = {0};
sprintf_s(currdir, "%s\\*.*", DirName);
hFirstFile = ::FindFirstFile(currdir, &FindData);
if( hFirstFile == INVALID_HANDLE_VALUE )
return false;
BOOL bRes = true;
while(bRes)
{
bRes = ::FindNextFile(hFirstFile, &FindData);
if( (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) //发现目录
{
if( !strcmp(FindData.cFileName, ".") || !strcmp(FindData.cFileName, "..") ) //.或..
continue;
else
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
DeleteDirectory(tmppath);
}
}
else //发现文件
{
char tmppath[MAX_PATH] = {0};
sprintf_s(tmppath, "%s\\%s", DirName, FindData.cFileName);
::DeleteFile(tmppath);
}
}
::FindClose(hFirstFile);
if(!RemoveDirectory(DirName))
{
return false ;
}
return true;
}
0 0
- vc中删除文件夹以及文件夹中的内容的三种方法
- vc中删除文件夹以及文件夹中的内容的三种方法
- VC中删除文件夹以及文件夹中的内容
- android中删除文件夹以及文件夹中的文件的方法
- 删除文件夹的几种方法(VC)
- vc复制指定文件夹以及文件夹内的内容
- android删除文件夹以及文件夹中的文件的方法(清晰易懂)
- VC 删除文件夹 及 下面所有内容
- VC 删除文件夹 及 下面所有内容
- VC 删除文件夹 及 下面所有内容
- VC中创建文件夹的方法
- VC中创建文件夹的方法
- VC中创建文件夹的方法
- 删除文件夹里的内容
- VC遍历文件夹,删除文件夹
- C#/.NET中删除指定文件夹下所有文件和文件夹的几种方法汇总
- C#复制文件夹,删除文件夹的方法
- C#复制文件夹,删除文件夹的方法
- KNN K最近邻算法
- HTTP(超文本传输协议)
- linux下编译出现tmp空间不足解决办法
- 模板函数的使用
- linux ioctl()函数详解
- vc中删除文件夹以及文件夹中的内容的三种方法
- hibernate Init()执行步奏与流程
- maven项目在打war包时出现非法字符: '\ufeff' 解决方案
- JavaScript设置Cookie 解释
- 【九度OJ】题目1028:继续畅通工程 解题报告
- 在win 10 14393 的版本中复制对象名称转ansi 多出符号
- Jquery DataTable应用
- Jump Game II
- python 文件去重复