2013-06-05 29 views
0

到下面的函数,我不能写我想C++的fstream和c的的fopen什么是错了,请帮忙提前 由于我使用的代码块MinGW的Windows 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

我传递openFileDialog(NULL,“Image Files \ 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

相关问题