2015-06-16 2 views
0

Я вызываю диалог сохранения, чтобы сохранить XML-файл (например: a.xml), а затем сохранить его в другом месте (например: a_clone.xml) в другое место. Но он работает только для файла a.xml. Это мой код для сохранения диалога:Диалоговое окно C++ Save

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; 
} 

Может кто-нибудь помогите мне, пожалуйста!

+0

Что вы имеете в виду «это работает только для a.xml файла»? Что не работает? Где код, в котором вы сохраняете клон? –

+0

Простите за то, что не ясны. Я имею в виду, что сохраняется только файл «a.xml», но «a_clone.xml» - нет. – zontop

+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; 
} 
+0

Я не думаю, что проблема исходит из целевого каталога, потому что перед открытием диалогового окна сохранения я попытался успешно записать текстовый файл в целевой каталог – zontop

Смежные вопросы