场景:

1. 有时候程序须要生成一些暂时文件夹和暂时文件,在程序退出时须要删除,这时候用win32的api就可以完毕需求。自己遍历文件夹一个个removefile并非高效率的做法.

//注意:
//1.要删除的文件夹不能以\\结尾.仅仅能以文件夹名结尾。比方C:\\New Folder,而不是C:\\New Folder\\,不然会失败.能够使用/作为分隔符.
//2.pFrom的值必须是以\0结尾的字符串,unicode字符串要以两个\0\0结尾.
//3.能够使用std::string或std::wstring的c_str(),由于这个函数返回的字符串已经带\0或\0\0结尾.
//4.要删除的文件夹里的文件或文件夹的句柄必须被释放,假设有占用的句柄。删除会失败.
//5.FOF_SILENT 是设置不出现进度条窗体.
//6.FOF_NOCONFIRMATION 是不弹出确认对话框.

test_deletedir.cpp 注意,文件以utf8格式存储.

#define UNICODE

#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <assert.h> using namespace std; int WXDeleteDir(const wchar_t* path)
{
SHFILEOPSTRUCT FileOp;
FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = path;
FileOp.pTo = NULL;
FileOp.wFunc = FO_DELETE;
return SHFileOperation(&FileOp);
} wchar_t* ConvertUtf8ToUnicode(const char* utf8)
{
if(!utf8)
{
wchar_t* buf = (wchar_t*)malloc(2);
memset(buf,0,2);
return buf;
}
int nLen = ::MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,(LPCSTR)utf8,-1,NULL,0);
//返回须要的unicode长度
WCHAR * wszUNICODE = new WCHAR[nLen+1];
memset(wszUNICODE, 0, nLen * 2 + 2);
nLen = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)utf8, -1, wszUNICODE, nLen); //把utf8转成unicode
return wszUNICODE;
} int main(int argc, char const *argv[])
{
wchar_t* unicode = ConvertUtf8ToUnicode("C:\\Users\\apple\\Desktop\\新建文件夹");
int res = WXDeleteDir(unicode);
cout << "res: " << res << endl;
assert(!res);
free(unicode); return 0;
}

最新文章

  1. 【开源】知乎日报UWP 更新
  2. 当shiro不进入自定义realm的权限认证方法时
  3. InnoDB 存储引擎的锁机制
  4. 创建Xml文件与修改Xml文件
  5. mysql之各种命令总结
  6. Vmware vsphere webservice sdk 连接打开慢的问题
  7. Data conversion error converting
  8. html之内联标签img
  9. iOS16进制设置颜色
  10. easyui-validatebox验证 radio
  11. 数据结构与算法JavaScript 读书笔记
  12. jsonp是什么以及jsonp的使用
  13. Chapter 1. Introduction gradle介绍
  14. 利用PHP/MYSQL实现的简易微型博客(转)
  15. PAT (Advanced Level) 1097. Deduplication on a Linked List (25)
  16. Cocos2D实现上下滚动式状态窗口
  17. tomcat7性能调优与配置(以windows版为例)
  18. [openssh-server]install and enable ssh in debian9 / 在debian9上安装并启用ssh
  19. snmp安装,及测试
  20. 关于MSCOMM.OCX无法正常注册的问题解决

热门文章

  1. Hadoop案例(三)找博客共同好友
  2. JQuery经典总结
  3. 首次使用ideal构建maven项目web
  4. Scrapy实战篇(四)之周杰伦到底唱了啥
  5. PHP变量的使用
  6. Angular Material Starter App
  7. MySQL注射绕过技巧
  8. liblinear参数及使用方法(原创)
  9. keras入门--Mnist手写体识别
  10. wait, WIFEXITED, WEXITSTATUS