Я вызываю диалог сохранения, чтобы сохранить XML-файл (например, a.xml), а затем сохраняю его клон (например, a_clone.xml) в другое место в режиме без вывода сообщений. Но это работает только для файла .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;
}
Кто-нибудь может мне помочь!
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;
}