2017-07-25 75 views
1

C++で非常に不満な問題を扱っている。 MoveFile関数を使用する必要がありますが、これは失敗します。今私はこのようなCopyFileメソッドを使用しています:CopyFileが成功すると、同じパラメータでMoveFileが失敗する - C++

partialresult = L"D:\\CppWork\\test2\\decToBin.exe"; 
finala = L"D:\\CppWork\\test2\\PeFiles_\\decToBin.exe"; 

if (0 == CopyFile(partialresult, finala,b)) {///// 
    DWORD err = GetLastError(); 
    std::cout << " -> Copy Fail" << std::endl; 
} 

コピーOK動作しますが、私は(パスを変更せず)のMoveFileでCopyFileメソッドを置き換える場合は、コードの0x20(MSDN doc - >ERROR_FILE_NOT_FOUND)で失敗します。 MoveFileをCopyFileに置き換えて、プレビューパスからファイルを削除すると、コピーは機能しますが、削除が再度失敗します。ERROR_FILE_NOT_FOUND

bool b = false; 
if (0 == CopyFile(partialresult, finala,b)) {//copy works but when try to delete the file give error 
    DWORD err = GetLastError(); 
    std::cout << " -> Copy Fail" << std::endl; 
    outFile << " -> Copy Fail" << std::endl; 
} 
    else { 
    std::cout << " -> Copy Done" << std::endl; 
    outFile << " -> Copy Done" << std::endl; 
    if (!DeleteFile(partialresult)) 
     DWORD err= GetLastError(); //error is "ERROR_FILE_NOT_FOUND" 
    } 

ここで何が起きているのでしょうか?おかげさまで

+3

'ネットHELPMSGは32'(= 0x20の)」を与えます_プロセスがファイルにアクセスできません**他のプロセスで使用されているため** ._ "...は使用中のEXEですか?これは移動/削除に失敗しますが、コピーは正常に動作します。 – TripeHound

+0

私はとても愚かです...私はエラーコードの値が16進数であるのを見ていません。そうです、exeは使用中です。使用中のプロセスでファイルを削除する方法はありますか? – Adrian

+0

IIRC(ただし間違っているかもしれない)には、「使用しなくなったときに削除マークを付ける」というフラグがあります(ただし、Unixの動作と混同している可能性があります)。 – TripeHound

答えて

1

プロセスは次のように終了した後、私は、削除のためにそれらをマークすることでのCreateFileの問題を解決した:

CreateFile(path, GENERIC_READ,FILE_SHARE_DELETE,NULL, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE,NULL); 

ありがとうすべて:)

+0

これはちょっとした回避策のようです。私はもう少し掘り下げます。 –

+0

これ以上優雅なアイデアはありますか?私は提案に開放されています:D – Adrian

+0

touche、私はちょうどハンドルを閉じるために失敗したと思われるものを探していました。 –

関連する問題