2012-02-08 196 views
3

我在使用SHFileOperation时出现问题:SHFileOperation/SHFILEOPSTRUCT。我得到了这个工作,但我现在试图把它放到一个函数中,因为它会在我的代码中多次使用。该功能是:系统错误124 - 使用SHFileOperation的ERROR_INVALID_LEVEL

void SHFileOperationFunc(string item1, string item2, int operation) 
{ 
    SHFILEOPSTRUCT sf; 
    memset(&sf,0,sizeof(sf)); 
    sf.hwnd = 0; 
    sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI; 

    switch(operation) 
    { 
    case 1: 

    case 2: 
     sf.wFunc = FO_COPY; 
     string files = item1 + "\\*.*"; 
     files.append(1, '\0'); 
     sf.pFrom = files.c_str(); 
     item2.append(1, '\0'); 
     sf.pTo = item2.c_str(); 
    } 

    int opOkay = SHFileOperation(&sf); 
    if(opOkay != 0) 
    { 
     //FAIL 
    } 

}

当我有以外的功能代码它工作得很好。但现在,它是如上所述,我得到一个错误返回opOkay。错误值是124,这意味着ERROR_INVALID_LEVEL - 系统调用级别不正确。我不知道这是什么意思。谷歌也没有很多帮助。任何人都能启发我吗?

我也应该使用SHFileOperation或应该使用IFileOperation

干杯。

+3

错误代码124 = 0x7c = ['DE_INVALIDFILES'(源或目的地或两者中的路径无效)](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164 %28V = vs.85%29.aspx)。 – 2012-02-08 14:10:24

+0

@ RaymondChen,这是我的混淆。你可以发布这个答案吗? – 2015-12-21 08:55:00

回答

3

问题是files将在切换块结束时超出范围,并且sf.pFrom将成为悬挂指针。将files的声明移至switch之外。

请注意,您在switch区块中没有任何break s。

+0

soooo应该看到一个。谢谢 – discodowney 2012-02-08 12:15:31