2017-07-25 70 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; 
} 

複製工作正常,但如果我用MoveFile取代的CopyFile(不改變路徑)失敗,代碼爲0x20(MSDN doc - >ERROR_FILE_NOT_FOUND)。 此外,如果我嘗試用CopyFile替換MoveFile,然後從預覽路徑中刪除文件,複製工作但刪除失敗再次與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" 
    } 

有沒有人有一些ideea這裏發生了什麼? 謝謝。

+3

'NET HELPMSG 32'(= 0×20)給出「 _進程無法訪問該文件**,因爲它正在被另一個進程使用** ._「...是正在使用的EXE嗎?這將失敗移動/刪除,但讓複製工作正常。 – TripeHound

+0

我很愚蠢......我沒有看到錯誤代碼的值是十六進制。這是正確的,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,我只是想找那些推測的失敗來關閉手柄。 –

相關問題