安装MS office2003后调用SHFileOperation删除文件时出现奇怪的结果

时间:2010-02-23 09:32:42

标签: c++ windows winapi sdk

我使用以下代码删除文件。它很好。

SHFILEOPSTRUCT FileOp;
ZeroMemory(&FileOp, sizeof(SHFILEOPSTRUCT));
FileOp.hwnd = m_hAppHandle;
FileOp.wFunc = FO_DELETE; //delete
FileOp.pFrom = szPath; 
FileOp.pTo = NULL; 
FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI;
FileOp.fAnyOperationsAborted = FALSE; 
FileOp.hNameMappings = NULL; 
FileOp.lpszProgressTitle = NULL;  

SHFileOperation(&FileOp);

但是我发现了一个扼杀的东西,复制步骤如下: 1.安装win2000 2.安装MS office2003

第一次(也是第一次)我调用“SHFileOperation”函数来删除文件。然后系统警告消息框显示

“Windows无法在此处创建快捷方式。您是否希望将快捷方式放在桌面上? “

无论我选择“确定”还是“否”按钮关闭警告消息框。然后,这样的警告消息框永远不再显示,即在我关闭警告消息框之后,我可以调用“SHFileOperation”函数来删除没有这种系统警告消息的文件。

这真的很神奇,它只发生过一次。

任何人都知道一些相关信息?感谢。

1 个答案:

答案 0 :(得分:3)

pFrom SHFILEOPSTRUCT成员是一个以空字符结尾的字符串列表,应该以double为结尾。看起来szPath是一个以null结尾的字符串,其中只有一个路径。这意味着SHFileOperation将超出您预期的pFrom结尾。

SHFILEOPSTRUCT的MSDN图书馆:http://msdn.microsoft.com/en-us/library/bb759795%28VS.85%29.aspx

博客文章:Don't forget to double-null-terminate those strings you pass to SHFileOperation