使用SHFileOperation操作文件的确是很方便的,但是很可能遇到这个问题,不好解决,如下:
CString tmpStr = _T("C:\\Documents and Settings\\XPMUser\\桌面\\BAK\\34");
SHFILEOPSTRUCT lpsh;
ZeroMemory(&lpsh,sizeof(lpsh));
lpsh.hwnd= NULL;
lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;
lpsh.wFunc=FO_DELETE;
lpsh.pFrom = tmpStr.GetBuffer(tmpStr.GetLength());
SHFileOperation(&lpsh);
这是无法执行成功的,会报错:找不到磁盘文件,无法打开之类的错误。
但是,如果将tmpStr这样定义:
LPCTSTR tmpStr = _T("C:\\Documents and Settings\\XPMUser\\桌面\\BAK\\34");
则能正常执行了,我开始是不是与SHFileOperation这个外壳函数的内部实现有关系,因为CString这个对象的生存周期是有限的,则其GetBuffer必然也是有限的,但是经过验证,我把CString改为静态变量或者改为动态分配的变量,也是不行的,不知道为什么,有没有人知道呢,请给我留言!