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
files.at(i)是当前文件的wstring
名称
extensions.at(i)是追随的子字符串。在files.at(i)中。例如:
如果files.at(0)
为mytext.txt
,则extensions.at(0)
为txt
。
MoveFileW返回false,如果我GetLastError()
,我收到错误123 ERROR_INVALID_NAME
。
为什么我不能移动文件?
答案 0 :(得分:5)
您有未定义的行为。 std::wstring::operator+
返回一个临时值,origin
和destination
最终指向释放的内存。如果你在调试器中查看你的程序,你几乎肯定会看到这个。
将您的代码更改为:
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());
答案 1 :(得分:0)
LPCWSTR origin = (path + L"\\" + files.at(i)).wstring::c_str();
这一行将创建一个匿名的wstring对象,将数据指针传递给'origin'。在这一行之后,匿名对象将是析构函数,并使'origin'指向已经空闲的内存。