码迷,mamicode.com
首页 > 其他好文 > 详细

SHFileOperation 解决double-null terminated

时间:2018-06-20 21:21:26      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:text   operation   增加   func   fir   from   his   mina   wstring   

技术分享图片
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,所以要这么做,不然删除文件夹会失败的

SHFileOperation 解决double-null terminated

标签:text   operation   增加   func   fir   from   his   mina   wstring   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!