将文件从一个目录移动到另一个目录

时间:2017-03-01 15:10:39

标签: c++ winapi

我想将test1中的所有文件复制到test2中。代码编译但没有任何反应。

#include <iostream>
#include <stdlib.h>
#include <windows.h>

using namespace std;

int main()
{
    string input1 = "C:\\test1\\";
    string input2 = "C:\\test2\\";
    MoveFile(input1.c_str(), input2.c_str());
}

我正在考虑使用xcopy,但它不会接受预先定义的字符串。有工作吗?

2 个答案:

答案 0 :(得分:2)

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文件夹)。

答案 1 :(得分:1)

我通过从test2中删除\\来解决了这个问题。文件夹测试2不存在。感谢您的回复和测试代码。我认为SHFileOperation将是一个更好的选择,因为我必须将文件从软盘传输到我的C盘。 string input1 =&#34; C:\\ test1 \\&#34 ;;        string input2 =&#34; C:\\ test2&#34 ;;