std::string GetLastErrorAsString()
{
//Get the error message, if any.
DWORD errorMessageID = ::GetLastError();
if (errorMessageID == 0)
return std::string(); //No error message has been recorded
LPSTR messageBuffer = nullptr;
size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
std::string message(messageBuffer, size);
//Free the buffer.
LocalFree(messageBuffer);
return message;
}
int main()
{
string input1 = "C:\\test1\\";
string input2 = "C:\\test2\\";
if (!MoveFile(input1.c_str(), input2.c_str()))
{
string msg = GetLastErrorAsString();
cout << "fail: " << msg << endl;
}
else {
cout << "ok" << endl;
}
system("pause");
}
您的代碼工作對我來說,你可能要設置的字符在你的項目屬性設置爲use multi-byte character set
。 如果沒有,請向我們提供錯誤。 檢查您是否擁有C:上的寫權限。 檢查C:中是否已有test2
文件夾:(或C:中沒有test1
文件夾:)。
檢查'MoveFile'的返回值,當你看到它說失敗時,使用'GetLastError'找出原因。 –
根據['MoveFile()'](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365239.aspx)文檔:「*'lpNewFileName' [in] 文件或目錄**新名稱不能存在**新文件可能位於不同的文件系統或驅動器上新的目錄必須位於同一個驅動器上*「test2'目錄是否已存在?考慮使用['SHFileOperation()'](https://msdn.microsoft.com/en-us/library/windows/desktop/bb762164.aspx)或['IFileOperation'](https://msdn.microsoft.com /en-us/library/windows/desktop/bb775771.aspx)而不是'MoveFile()'。 –
如果這些都是目錄,那麼你希望發生的事情不會。 –