SHFileOperation 解决double-null terminated

Posted likemao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, , 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] = ‘‘;//暴力增加double-null terminated.这个时候字符串结尾"   "了(widechar) dangerous
    wchar_t *tmp2 = new wchar_t[a + 2];
    wmemcpy(tmp2, tmp, a);
    wmemcpy(tmp2 + a, L"", 2);

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

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

以上是关于SHFileOperation 解决double-null terminated的主要内容,如果未能解决你的问题,请参考以下文章

SHFileOperation删除文件夹

关于解决double类型数据显示问题的解决

如何解决此错误:二进制表达式的操作数无效('std::vector<double>' 和 'double')?

解决double的值相加的问题

java中两double相加精度丢失问题及解决方法

Android(java)开发之将double类型,强制保留到小数点后两位解决方法。