2012-02-08 27 views
3

SHFileOperationSHFileOperation/SHFILEOPSTRUCTを使用する際に問題が発生しました。私はそれを働かせましたが、私は今、コード全体に何度か使用されるので、それを関数に入れようとしています。機能は次のとおりです。システムエラー124 - ERROR_INVALID_LEVEL with SHFileOperation

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 - システムコールレベルが正しくありません。私はこれが何を意味するのか知りません。 Googleはそれほど助けとなっていません。誰でも私を啓発する?

また、SHFileOperationを使用する必要がありますか、またはIFileOperationを使用する必要がありますか?

乾杯。

+3

エラーコード124 = 0x7c = ['DE_INVALIDFILES'(ソースまたはデスティネーションまたは両方のパスが無効)](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762164) %28v = vs.85%29.aspx)。 –

+0

@RaymondChen、それは私の混乱でした。これを回答として投稿できますか? –

答えて

3

スイッチブロックが終了するとfilesが範囲外になり、sf.pFromがダングリングポインタになるという問題があります。 filesの宣言をswitchの外側に移動します。

switchのいずれかのブロックには、breakがありません。

+0

sooooはそれを見たはずです。ありがとう – discodowney

関連する問題