2015-06-16 96 views
0

我調用保存對話框來保存xml文件(例如:a.xml),然後將其克隆(例如:a_clone.xml)保存到其他位置。但它只適用於a.xml文件。 這是我的保存對話框的代碼:C++保存對話框

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」等是受保護的目錄,需要admin權限才能複製到這些目錄。

您還可以檢查錯誤:

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