CFileDialog 在新文件夹单击时崩溃



大家好,我在 MFC 中维护此代码

 char szFilters[]= "Text Files(*.txt)|*.txt|Register File Definition Files(*.rgf)|*.rgf|All Files(*.*)|*.*|";
CString fileName;
pEdit->GetWindowText(fileName);
CFileDialog fileDlg (TRUE, "txt", fileName,
    OFN_FILEMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR, szFilters, this);
// Display the file dialog. When user clicks OK, fileDlg.DoModal() 
// returns IDOK.
if(IDOK == fileDlg.DoModal())
{
    fileName = fileDlg.GetPathName();
    pEdit->SetWindowText(fileName);
}

这是Visual Studio消息:
这可能是由于堆损坏,这表示 APP.exe 或其加载的任何 DLL 中存在错误。这也可能是由于用户在 APP.exe 具有焦点时按 F12。输出窗口可能包含更多诊断信息。堆[APP.exe]:00000000077C5DA0 处的堆块在 000000000077C5DB4 修改,请求的大小为 4Windows 在 APP.exe 中触发了一个断点。这可能是由于堆损坏,这表示 APP.exe 或其加载的任何 DLL 中存在错误。这也可能是由于用户在 APP.exe 具有焦点时按 F12。输出窗口可能包含更多诊断信息



当我单击新文件夹时,我收到一个异常,指出我的应用程序.exe触发了一个断点。并且应用程序崩溃。我尝试使用与OFN_EXPLORER等不同的标志,但没有运气。

MSDN 没有提供有关标志的大量信息。 你能帮忙吗?

正如我上面评论的那样,您需要更改过滤器以正确终止(请注意末尾的"||"):

char szFilters[]= "Text Files(*.txt)|*.txt|Register File Definition Files(*.rgf)|*.rgf|All Files(*.*)|*.*||";

不这样做肯定会导致问题,因为过滤器字符串将被解析到其末尾之外。

最新更新