C/C++ 删除指定目录

1.介绍

  用到shlwapi.h和tchar.h头文件。
  shlwapi.h是shlwapi.dll头文件,shlwapi.dll(Microsoft Shell Light-weight Utility Library)中定义了路径相关的操作,也包括了部分文件操作函数。由于shlwapi.dll属于Microsoft Windows Shell,因此这些文件操作特点与通过Shell进行文件操作类似。
下面列出部分常用的文件操作相关函数。

函数名作用
PathIsDirectory判断一个路径是否有效目录
PathIsDirectoryEmpty判断一个路径是否空目录
PathFileExists判断一个路径是否有效目录或文件
PathRenameExtension更改文件的后缀名
SHFileOperation可实现文件或目录的复制、移动、重命名和删除操作,并可一次操作多个文件或目录

  
  其中,SHFileOperation可实现整个目录的内容的复制和删除。SHFileOperation可一次实现多个目录的复制或删除,其输入参数结构体SHFILEOPSTRUCT中的pFrom(源目录)和pTo(目的目录)都可以输入多个目录,目录之间通过’\0’分割,pFrom和pTo必须以2个’\0’结尾。一般情况下,我们都只是对一个目录操作,因此,SHFileOperation调用并不是很方便,下面就对SHFileOperation进行包装,提供更方便调用的目录操作函数。

代码

BOOL SHDeleteFolder(LPCTSTR pstrFolder)
{
    int iPathLen = _tcslen(pstrFolder);
    TCHAR tczFolder[MAX_PATH+1];
    SHFILEOPSTRUCT FileOp; 

    if ((NULL == pstrFolder))
    {
        return FALSE;
    }


    if (iPathLen >= MAX_PATH)
    {
        return FALSE;
    }

    /*确保目录的路径以2个\0结尾*/
    ZeroMemory(tczFolder, (MAX_PATH+1)*sizeof(TCHAR));
    _tcscpy(tczFolder, pstrFolder);
    tczFolder[iPathLen] = _T('\0');
    tczFolder[iPathLen+1] = _T('\0');

    ZeroMemory(&FileOp, sizeof(SHFILEOPSTRUCT)); 
    FileOp.fFlags |= FOF_SILENT;            //不显示进度
    FileOp.fFlags |= FOF_NOERRORUI;         //不报告错误信息
    FileOp.fFlags |= FOF_NOCONFIRMATION;    //直接删除,不进行确认
    FileOp.hNameMappings = NULL;
    FileOp.hwnd = NULL;
    FileOp.lpszProgressTitle = NULL;
    FileOp.wFunc = FO_DELETE;
    FileOp.pFrom = tczFolder;               //要删除的目录,必须以2个\0结尾
    FileOp.pTo = NULL; 

    FileOp.fFlags &= ~FOF_ALLOWUNDO;       //直接删除,不放入回收站

    /*删除目录*/
    if (0 == SHFileOperation(&FileOp))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

3. 测试

int main()
{
    SHDeleteFolder("D:\\removeFile");
    return 0;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值