C ++保存对话框

时间:2015-06-16 04:36:05

标签: c++ streaming fwrite streamwriter

我调用保存对话框来保存xml文件(例如:a.xml),然后以静默方式将其克隆(例如:a_clone.xml)保存到其他位置。但它只适用于a.xml文件。 这是我保存对话框的代码:

string Savefilename(char *filter = "Mission Files (*.mmf)\0*.mmf", HWND owner = NULL){
    OPENFILENAME ofn;
    char fileName[MAX_PATH] = "";
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(OPENFILENAME);
    ofn.hwndOwner = owner;
    ofn.lpstrFilter = filter;
    ofn.lpstrFile = fileName;
    ofn.nMaxFile = MAX_PATH;
    ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
    ofn.lpstrDefExt = "";
    ofn.lpstrInitialDir ="Missions\\";

    string fileNameStr;
    if ( GetSaveFileName(&ofn) )
    fileNameStr = fileName;

    return fileNameStr;
}

任何人都可以帮助我!

1 个答案:

答案 0 :(得分:0)

CopyFile是一个简单的功能,通常可靠。它在这里失败可能是因为目标目录没有退出,或者因为你没有对目标目录的写访问权。与std::ofstream myfile相同,您可能没有检查错误。

确保目标目录存在。提供目标文件的完整路径名。确保您有权访问目标目录。

注意" c:\ program files"等等是受保护的目录,您需要管理员权限才能复制到这些目录。

您还可以检查错误:

SetLastError(0);

CopyFile(source, destination, FALSE);

DWORD error = GetLastError();
if (error)
{
    char buf[255];
    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, buf, 255, 0);
    cout << "error: " << error << ", " << buf << endl;
}
相关问题