2016-07-20 68 views
0
 wstring path = L"C:\\Users\\oneworduser\\Desktop\\trash"; 
     LPCWSTR origin = (path + L"\\" + files.at(i)).wstring::c_str(); 
     LPCWSTR destination = (path + L"\\" + extensions.at(i) + L"\\" + files.at(i)).wstring::c_str(); 
     //move file 
     BOOL b = MoveFileW(origin, destination); 

MoveFileW返回false。 (i)wstring當前文件的名稱。
extensions.at(i)是緊隨其後的子字符串。在files.at(i)中。例如:
如果files.at(0)mytext.txt,extensions.at(0)txt。 MoveFileW返回false,如果我GetLastError()我得到錯誤123這是ERROR_INVALID_NAME
爲什麼我不能移動文件?ERROR_INVALID_NAME嘗試使用MoveFile移動文件時使用C++

回答

4

您有未定義的行爲。 std::wstring::operator+正在返回臨時值,並且origindestination最終指向釋放的內存。如果你在調試器中看過你的程序,你幾乎肯定會看到這個。

你的代碼更改爲:

wstring path = L"C:\\Users\\oneworduser\\Desktop\\trash"; 
wstring origin = path + L"\\" + files.at(i); 
wstring destination = path + L"\\" + extensions.at(i) + L"\\" + files.at(i); 
//move file 
BOOL b = MoveFileW(origin.c_str(), destination.c_str()); 
+0

非常感謝你,沒有這個我不會完成這個程序。 – Carlos

0
LPCWSTR origin = (path + L"\\" + files.at(i)).wstring::c_str(); 

這條線將創建一個匿名的wstring對象,通過數據指針指向 '出身'。在這一行之後,匿名對象將是析構函數,並且使'origin'指向已經釋放的內存。

相關問題