CFileDialog 打开/保存对话框

问题描述:
下面有2段代码,分别属于不同的类,代码1报错(附图1,附图2),代码2正常运行,将代码1copy出来调试,依然报错,将代码2copy出来调试,正常运行,将代码2改为代码1,运行正常,将运行正常的代码1copy到程序中,运行正常。原因不明。
代码3为自己提供缓冲区,可解决代码1报错问题。

保存对话框代码1:

    CString TestFile;	
	LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
	CFileDialog aDlg(false, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);
	aDlg.m_ofn.lpstrTitle = "Save";
	if (aDlg.DoModal() == IDOK)
	{
		TestFile = aDlg.GetPathName();
	}
	else
		return;

打开对话框代码2:

    CString TestFile;	
	LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
	CFileDialog aDlg((true, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);
	aDlg.m_ofn.lpstrTitle = "Open";
	if (aDlg.DoModal() == IDOK)
	{
		TestFile = aDlg.GetPathName();
	}
	else
		return;

代码3:参考 http://www.cppcns.com/ruanjian/c/92283.html

CString TestFile;
LPCSTR lpszFilter = "Test Files(*.txt)|*.txt||";
CFileDialog aDlg(false, ".txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, lpszFilter);

const int MIN_FILE_NUMBER = 10;   //至少允许选择10个文件
aDlg.m_ofn.lpstrFile = new TCHAR[_MAX_PATH * MIN_FILE_NUMBER]; //重新定义缓冲区大小         
memset(aDlg.m_ofn.lpstrFile, 0, _MAX_PATH * MIN_FILE_NUMBER);  //初始化定义的缓冲区
aDlg.m_ofn.nMaxFile = _MAX_PATH * MIN_FILE_NUMBER;
if (aDlg.DoModal() == IDOK)
{
	POSITION pos = aDlg.GetStartPosition();
	while (NULL != pos)
	{
		TestFile = aDlg.GetPathName();//获取文件名
		//使用文件...
	}
}
delete[] aDlg.m_ofn.lpstrFile;     //最后别忘了释放内存

代码1报错-图1
图1
代码1报错-图2-中断位置
图2

发布了38 篇原创文章 · 获赞 1 · 访问量 1860

猜你喜欢

转载自blog.csdn.net/qq_36633275/article/details/104677128