SHFileOperation一个问题

来源:互联网 发布:淘宝职业差评师团队 编辑:程序博客网 时间:2024/06/03 16:14

使用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改为静态变量或者改为动态分配的变量,也是不行的,不知道为什么,有没有人知道呢,请给我留言!