2013-11-23 4 views
0

У меня проблема с GetOpenFileName. Перед вызовом метода GetOpenFileName работает WriteData. WriteData имеют простую процедуру проверки файла:Get open filename убивает ifstream

ifstream inFile(FileName.c_str()); 
if (!inFile.is_open()) return false; 

Ofn дамп: Dump
И после вызова GetOpenFileName его всегда ложно. Но прежде, чем вызвать GetOpenFileName, он работает нормально.

while (!lang->LoadLang(config->getLanguagePath())) 
{ 
    OPENFILENAME ofn = {0}; 
    ofn.lStructSize = sizeof(ofn); 
    ofn.lpstrFile = config->getLanguagePath(); 
    ofn.lpstrFile[0] = '\0'; 
    ofn.lpstrTitle = "Select the language file"; 
    ofn.nMaxFile = 255; 
    ofn.lpstrFilter = "Language file\0*.lng\0"; 
    ofn.nFilterIndex = 1; 
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 
    if (GetOpenFileName(&ofn) == 0) return 0; 
    config->WriteData(KEY_LANG, ofn.lpstrFile); 
} 
+0

Вы пытались использовать отладчик, чтобы посмотреть, как выглядит структура после вызова GetOpenFileName? –

+0

Проверьте это. Вопрос обновляется. –

+0

Это похоже на допустимое имя файла, поэтому все, что происходит неправильно, похоже, находится в коде, который вы не показывали. –

ответ

0

Проблема решена. Я попытался использовать WinAPI-функцию OpenFile для открытия файла и получил код ошибки 2 (файл не найден). И теперь я исправил его.

char buffer[255]; 
GetCurrentDirectoryA(255, buffer); 
OPENFILENAME ofn = {0}; 
ofn.hInstance = hInstance; 
ofn.lStructSize = sizeof(OPENFILENAME); 
ofn.lpstrFile = config->getLanguagePath(); 
ofn.lpstrFile[0] = '\0'; 
ofn.lpstrTitle = "Select the language file"; 
ofn.nMaxFile = 255; 
ofn.lpstrFilter = "Language file\0*.lng\0"; 
ofn.nFilterIndex = 1; 
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; 
if (GetOpenFileName(&ofn) == 0) return 0; 
SetCurrentDirectory(buffer); 
config->WriteData(KEY_LANG, ofn.lpstrFile);