2014-09-10 59 views
0

在我的代碼中實現GetOpenFileName函數之前,我已經使用了tinyxml 1,所以我知道每當我給它一個相對路徑或絕對路徑時,加載就會工作。使用GetOpenFileName檢索xml文件名後,tinyxml加載失敗

我只是不明白爲什麼它不起作用,只要函數GetOpenFileName首先執行。實際上,我嘗試了幾次來測試,每次執行該函數時,無論我是否使用它提供給我的文件路徑,tinyxml仍然找不到xml。

std::string tutName = getTutorialFilename(); 

if(tutName != "") { 
    std::cout << "Before replacing: " << tutName << std::endl; 

    boost::replace_all(tutName, "\\", "/"); 

    bool loadTutorial = tutorial->loadTutorialSteps(tutName); 

    if(loadTutorial) { 
     std::cout << "success!" << std::endl; 
    } else { 
     std::cout << "failed: " << tutName << "to load" << std::endl; 
    } 
} 

的功能getTutorialFilename,它使用GetOpenFilename:

std::string getTutorialFilename() { 
OPENFILENAME ofn;  // common dialog box structure 
char szFile[260];  // buffer for file name 
HWND hwnd;    // owner window 
HANDLE hf;    // file handle 

// Initialize OPENFILENAME 
ZeroMemory(&ofn, sizeof(ofn)); 
ofn.lStructSize = sizeof(ofn); 
ofn.hwndOwner = hwnd; 
ofn.lpstrFile = szFile; 
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself. 
ofn.lpstrFile[0] = '\0'; 
ofn.nMaxFile = sizeof(szFile); 
ofn.lpstrFilter = "XML\0*.xml*\0All\0*.*\0"; 
ofn.nFilterIndex = 1; 
ofn.lpstrFileTitle = NULL; 
ofn.nMaxFileTitle = 0; 
ofn.lpstrInitialDir = NULL; 
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 

// Display the Open dialog box. 

if (GetOpenFileName(&ofn)==TRUE) { 
    hf = CreateFile(ofn.lpstrFile, 
        GENERIC_READ, 
        0, 
        (LPSECURITY_ATTRIBUTES) NULL, 
        OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, 
        (HANDLE) NULL); 

    std::string tutorialFilename(szFile); 

    return tutorialFilename; 
} 

return ""; 

}

我知道它找到tutorialFilename沒有多餘的空格,因爲我已經跑了調試器,但我還是不明白爲什麼tinyxml無法加載。

回答

0

我想出了這個問題。 TinyXML正在輸出錯誤13 - 由於CreateFile阻止訪問文件而拒絕權限。我刪除了該功能,因爲我不需要它。