关于C#:CFileDialog在新文件夹上崩溃时单击

CFileDialog crashes on new folder click

您好,我正在MFC中维护此代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 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键。输出窗口可能具有更多的诊断信息。HEAP [APP.exe]:在00000000077C5DA0处的堆块已在00000000077C5DB4处修改为超出请求的大小的4Windows已在APP.exe中触发了一个断点。这可能是由于堆损坏所致,这表明APP.exe或它已加载的任何DLL中存在错误。这也可能是由于用户在按下APP.exe具有焦点。输出窗口可能包含更多诊断信息

当我单击新文件夹时,出现一个异常,说我的app.exe触发了断点。然后应用崩溃我尝试使用来自OFN_EXPLORER的其他标志等,但是没有运气。

MSDN并没有提供很多有关标志的信息。你能帮忙吗?


如上所述,您需要更改过滤器以正确终止(注意末尾的" || "):

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

不这样做绝对会导致问题,因为过滤字符串将超出其末尾进行解析。