C++ 当pFrom=”时,SHFileOperation删除&引用;

C++ 当pFrom=”时,SHFileOperation删除&引用;,c++,shfileoperation,C++,Shfileoperation,我有一个关于SHFileOperation的问题: SHFILEOPSTRUCT sf2; memset(&sf2,0,sizeof(sf2)); sf2.hwnd = NULL; sf2.wFunc = FO_DELETE; sf2.fFlags = FOF_NOCONFIRMATION; sf2.pFrom = pathSubDir; // where pathSubDir = "" //2. Delete temporary

我有一个关于SHFileOperation的问题:

    SHFILEOPSTRUCT sf2;
    memset(&sf2,0,sizeof(sf2));
    sf2.hwnd = NULL;
    sf2.wFunc = FO_DELETE;
    sf2.fFlags = FOF_NOCONFIRMATION;
    sf2.pFrom = pathSubDir; // where pathSubDir = ""

    //2. Delete temporary files
    int n = SHFileOperation(&sf2);

我的期望是,因为pathSubDir是“”,所以它不会删除任何内容,而且我应该得到不等于0的n。但事实并非如此。我的结果是n=0,这意味着操作已成功完成。我很好奇是否有人能向我解释为什么我的假设是错误的。谢谢。

API要求pFrom以双空终止。像
这样的简单空字符串不符合条件。API可以读取第一个空字符之后的任何内存,并成功删除这些文件


如果字符串的格式正确,另一种解释是API已成功删除所有请求的文件,并且在此过程中没有遇到任何失败。它完成了您要求的所有删除,因此返回成功。

操作“不删除任何内容”怎么可能失败?对于API设计师来说,在任何情况下都很难做正确的事情。必须有人做出决定:如果用户不删除任何内容,我会出错吗(毕竟,没有任何内容已被删除,所以从技术上讲它已被删除)。类似地,如果调用方要求删除“foo.bar”,但没有“foo.bar”,那么这是成功还是失败?IMX,Delete()函数的输入已被删除时,通常最好假定成功。这意味着对函数的客户端需要更少的检查,最终用户可以选择要删除的内容。“C:\SomeFolder\SomeTXT.txt”这个刺正确吗?不,不正确,@Sasha。如果像我在回答中所说的那样,
不是以双空结尾的,那么在其中添加其他非空字符不会使它突然变为双空。如果您希望在C字符串的末尾包含超过默认数量的空字符(即1),那么您需要自己将它们放在那里。请咨询。