2013-06-05 30 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

相關問題