[Windows]_[删除非空文件夹的注意要点]
场景:
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;
}
[Windows]_[删除非空文件夹的注意要点]的更多相关文章
- windows C++删除非空文件夹
//add by zhuxy 递归删除文件夹 BOOL myDeleteDirectory(CString directory_path) //删除一个文件夹下的所有内容 { BOOL ret=TRU ...
- 如何使用python移除/删除非空文件夹?
移除/删除非空文件夹/目录的最有效方法是什么? 1.标准库参考:shutil.rmtree. 根据设计,rmtree在包含只读文件的文件夹树上失败.如果要删除文件夹,不管它是否包含只读文件,请使用 i ...
- NodeJs递归删除非空文件夹
此篇博文由于第一次使用fs.unlink()删除文件夹时报“Error: EPERM: operation not permitted, unlink”错误而写,这是因为fs.unlink()只能删除 ...
- C 实现删除非空文件夹
/* 文件名: rd.c ---------------------------------------------------- c中提供的对文件夹操作的函数,只能对空文件夹进行 删除,这使很多 ...
- Windows删除空文件夹问题带来的学习与思考
https://blog.csdn.net/XavierDarkness/article/details/84785482 1.问题产生: 前段时间得到一份资源,号称有近500个G的学习资料,花了 ...
- 删除空文件夹 清除CS扩展名文件 bat
删除空文件夹.删的干净.删的彻底. 将下列代码复制到txt中保存.并把后缀.txt命成.bat.然后运行即可. 方案1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux_inux中find批量删除空文件及空文件夹脚本
1.{}和之间有一个空格 2.find . -name 之间也有空格 3.exec 是一个后续的命令,{}内的内容代表前面查找出来的文件 linux下批量删除空文件(大小等于0的文件)的方法 rm - ...
- git提交空文件夹和删除远程文件
git提交空文件夹 在文件夹中创建 .gitkeep 文件,文件内容如下 # Ignore everything in this directory * # Except this file !.gi ...
- python实现删除空文件夹 附源代码
前言:空文件夹虽然不占空间,但是有时候看着确实挺烦的(别误会,我不是强迫症!),所以写了一个用于删除当前目录下的空文件夹的小程序 环境:win7 64位:python2.7:IDE pycharm20 ...
随机推荐
- springboot 集合 meshsite3
工程目录 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...
- Linux下文件特殊权限
SUIDSUID表示在所有者的位置上出现了s在一个命令的所有者的权限上如果出现了s,当其他人在执行该命令的时候将具有所有者的权限.SUID权限仅对二进制文件有效 SGID表示在组的位置上出现了s如果一 ...
- 《构建高性能 Web站点》笔记
书名:构建高性能Web站点 出版社: 电子工业出版社 ISBN:9787121170935 一 绪论 等待的时间: (1) 数据在网络上的传输时间 (2) 站点服务器处理请求并生成回应数据的时间 ( ...
- loadrunner中自定义查找并替换函数
globas.h中定义 //LoadRunner中没有直接的函数支持查找并替换字符串,因此可以封装一个lr_replace函数出来: // ------------------------------ ...
- ubuntu sublime text 3 build 3083 license
经验证:sublime text 3 3083可用 ----- BEGIN LICENSE -----Andrew WeberSingle User LicenseEA7E-855605813A03D ...
- Java-redis分布式锁 抢购秒杀系统 实现
一.使用分布式锁要满足的几个条件: 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现) 共享资源(各个系统访问同一个资源,资源的载体 ...
- 移动App 的 ios11 和 iPhoneX 适配
原文链接:https://blog.csdn.net/lovelyelfpop/article/details/79460700 WKWebView 调用拨打电话功能 1.HTML 要标记添加标记电话 ...
- Django+Nginx+uwsgi搭建自己的博客(三)
(本来打算在这篇博文中介绍Users App的前端部分的,但写着写着就发现还需要铺垫很多东西才能把整个项目串的比较流畅些,因此这篇就继续介绍了后端的一些东西,前端的部分只好跳票到下一篇了-) 在上一篇 ...
- [BZOJ4870][六省联考2017]组合数问题(组合数动规)
4870: [Shoi2017]组合数问题 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 748 Solved: 398[Submit][Statu ...
- Android为什么需要广播Broadcast
在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它 ...