2012-02-08 65 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