SHFileOperation 解决double-null terminated

void rubyTools::funStrToWstr(string str, wstring& strw)
{
    const char* pData = str.c_str();
    int lengt = str.length();
    UINT CodePage = 936;
    DWORD dwNum = MultiByteToWideChar(CodePage, 0,
        pData, -1, NULL, 0);
    if (dwNum == 0)
    {
        return;
    }

    WCHAR* pwText = new WCHAR[dwNum];
    memset(pwText, ‘\0‘, dwNum);
    MultiByteToWideChar(CodePage, 0, pData, -1, pwText, dwNum);
    strw = pwText;
    delete []pwText;
}
wstring deletePath;
    funStrToWstr(mainrbPath + "\\lib", deletePath);
    SHFILEOPSTRUCT FileOp = { 0 };
    FileOp.hwnd= (HWND)this->winId();
    FileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;

    const wchar_t  *tmp = deletePath.c_str();
    wchar_t *pTmp = const_cast<wchar_t *>(tmp);
    int a = wcslen(pTmp);
    //pTmp[a + 1] = ‘\0‘;//暴力增加double-null terminated.这个时候字符串结尾"\0 \0 \0 \0"了(widechar) dangerous
    wchar_t *tmp2 = new wchar_t[a + 2];
    wmemcpy(tmp2, tmp, a);
    wmemcpy(tmp2 + a, L"\0\0", 2);

    FileOp.pFrom = tmp2;
    FileOp.pTo = NULL;
    FileOp.wFunc = FO_DELETE;
    if( SHFileOperation(&FileOp) != 0)
        errorNum |= replaceLibError;
    delete[]tmp2;

由于参数必须是must be double-null terminated,所以要这么做,不然删除文件夹会失败的

原文地址:https://www.cnblogs.com/likemao/p/9205477.html

时间: 2024-11-03 01:08:03

SHFileOperation 解决double-null terminated的相关文章

[FAQ]jackson解决:null到&quot;&quot;, 空值处理为空串

1.一个比较头疼的问题: jackson + spring 支持rest接口,输出的JSON 对于null的字符串是invoiceTitle: null,但是接受方希望返回的是invoiceTitle: "".解决方法重写ObjectMapper 2.代码如下: public JsonMapper() { //this(Include.NON_EMPTY); // 空值处理为空串 this.getSerializerProvider().setNullValueSerializer(

Java中如何解决double和float精度不准的问题

我们知道浮点数是无法在计算机中准确表示的,例如0.1在计算机中只是表示成了一个近似值,因此,对付点数的运算时结果具有不可预知性. 在进行数字运算时,如果有double或float类型的浮点数参与计算,偶尔会出现计算不准确的情况.如以下示例代码: package ex; public class BigDeciTest { public static void main(String[] args){ System.out.println(0.05+0.01); System.out.printl

解决double的值相加的问题

针对double类型的计算的问题之一: public class DoubleCaculator { double price = 0.38; int count = 3; @Test public void demo1() { //结果:1.1400000000000001 System.out.println(price * count); } } @Test public void demo2() { //bigDecimal的字符串的构造完美解决了double计算的问题 BigDecim

JAVA8之妙用Optional解决判断Null为空的问题

直接上实战 //以前写法 public String getCity(User user) throws Exception{ if(user!=null){ if(user.getAddress()!=null){ Address address = user.getAddress(); if(address.getCity()!=null){ return address.getCity(); } } } throw new Excpetion("取值错误"); } //java8

安装包设计-------打包(MFC)---------知识总结

目录: 1.选择文件夹 2.判断文件夹或文件是否存在 3.通过cmd命令行向程序中传递参数. 4.路径处理 5.文件夹以及文件的删除 6.复制文件 7.创建目录 8.从当前的应用程序中抽取资源 9.引用的别人的抽取等程序 10.压缩解压,引用别人的 11.添加资源到工程中 实现: 1.选择文件夹 CDirDialog dlg; dlg.SetWindowTitle(_T("选择待打包文件夹")); if(dlg.DoModal() == IDOK) { CString Path = d

java中的null注意事件总结

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

转!!Java中关于Null的9个解释(Java Null详解)

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

Java中的NULL

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

java null 空指针

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja