2014-09-10 2 views
0

Я уже использовал tinyxml 1, прежде чем я внедрил функцию GetOpenFileName в свой код, поэтому я знаю, что загрузка работает, когда я даю ей относительный путь или абсолютный путь.Ошибка загрузки tinyxml после использования GetOpenFileName для извлечения xml filename

Я просто не понимаю, почему он не работает, когда функция 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 к файлу. Я удалил эту функцию, потому что мне она не нужна.

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