2013-06-05 1 views
0

после вызова следующей функции я не могу писать в любые файлы я пробовал C++ fstream и Кассиопеяне Еореп что не так, пожалуйста, помогите заранее спасибо я использую CodeBlocks MinGW окна 7записи файлов не работает после вызова диалога выбора файла открыть

string openFileDialog(HWND hwnd,char *fileFilter,char *defaultExtension) 
{ 
    string fileName = ""; 
    OPENFILENAME ofn; 
    char szFileName[MAX_PATH] = ""; 
    ZeroMemory(&ofn, sizeof(ofn)); 

    ofn.lStructSize = sizeof(OPENFILENAME); 
    ofn.hwndOwner = hwnd; 
    ofn.lpstrFilter = fileFilter; 
    ofn.lpstrFile = szFileName; 
    ofn.nMaxFile = MAX_PATH; 
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; 
    ofn.lpstrDefExt = defaultExtension; 

    if(GetOpenFileName(&ofn)) { 
     fileName.assign(szFileName); 
    } 

    ZeroMemory(&ofn, sizeof(ofn)); 
    return fileName; 
} 
+1

Вы проверили, что строка, которую вы возвращаете, действительна? Что происходит, когда 'GetOpenFileName' возвращает' FALSE'? * Как * вы открываете файл? И почему вы называете «ZeroMemory» перед возвращением? Это не нужно, поскольку структура больше не используется. –

+0

Что такое значение 'fileFilter'? Это сложно. А также, почему это не параметр 'const'? – Medinoc

+0

i pass openFileDialog (NULL, «Файлы изображений \ 0 * .png; *. Jpg; *. Jpeg; *. Gif; * .bmp \ 0", "*. *"); и имя файла, возвращаемое функцией, действует, функция работает так, как ожидалось, но после того, как она не вызвала его, дальнейшая работа по записи/изменению файла – miko1

ответ

1

Если изменить папку в диалоговом окне будет изменить текущую папку для вашего процесса - попробуйте добавить OFN_NOCHANGEDIR флаг.

0

Попробуйте CreateFile и WriteFile.

string s = "file.dat"; 

HANDLE hFile = CreateFile(s.c_str(),  // name of the write 
        GENERIC_WRITE,   // open for writing 
        0,      // do not share 
        NULL,     // default security 
        CREATE_ALWAYS,   // Creates a new file, always 
        FILE_ATTRIBUTE_NORMAL, // normal file 
        NULL);     // no attr. template 
DWORD writesBytes; 
bool writeok = WriteFile(hFile, &Current_Doc, sizeof(Current_Doc), &writesBytes, NULL); 

CloseHandle(hFile); 

Аналогичная проблема, и мой ответ здесь:

OPENFILENAME open dialog

+0

спасибо, но OFN_NOCHANGEDIR работал :) – miko1

+0

Так отметьте это как ответ. – bartimar

+0

@ marbel82 решает проблему, не меняя текущий рабочий каталог процесса. – miko1

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