原帖见 http://blog.csdn.net/shiwei0124/archive/2009/09/10/4538327.aspx
在CSDN论坛上发了帖子后,和人一起解决了该问题
帖子内容如下:
先看一段代码:
static TCHAR BASED_CODE szFilter[] = _T("Map Files (*.txt)|*.txt|MapCfg Files(*.txty) |*.txty||");
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, /
szFilter,AfxGetMainWnd());
CString strPath;
CFileException e;
//判断是否按下"保存"按钮
if(dlg.DoModal() == IDOK)
{
//获得文件保存路径,为下面right(4)方便,而不用GetFileName();可能文件未设置后缀名,则若文件小于4个字符,会出错
strPath = dlg.GetPathName();
//根据用户选择的扩展名下拉框来确定添加的扩展名
switch (dlg.m_ofn.nFilterIndex)
{
//txt
case 1:
{
//判断文件扩展名
if(strPath.Right(4) !=_T(".txt"))
strPath += _T(".txt");
break;
}
//txty
case 2:
{
//判断文件扩展名
if(strPath.Right(7) !=_T(".txty"))
strPath += _T(".txty");
break;
}
}
if( access(strPath, 0) == 0 )//需要#include
{
CString strQuery;
strQuery.Format("%s 已经存在,要替换掉吗?", strPath);
if ( IDNO == ::MessageBox(m_hWnd, strQuery, "文件覆盖", MB_ICONQUESTION | MB_YESNO) )
{
OnBnClickedNew2();
}
}
这段代码中CFileDialog中有自带覆盖文件的提示,但是这个有一个问题,比如我想保存一个文件“temp”,但是我未指定这个文件的后缀名,CFileDialog只能检测我输入框的文件在文件夹内是否有重名文件"temp",我这些代码给附加了一些功能,根据文件扩展名过滤框自动添加未写的扩展名,而且之后进行判断是否有 "temp.txt",这里就等于进行了两次覆盖判断 一次是对话框自动的"temp"检测,还有一次就是我设置的"temp.txt"
我想要做的就是在对话框内判断"temp.txt",而不是"temp"的判断,即在对话框内自动添加扩展名然后进行判断。
(web浏览器进行图片保存时就是这个做法。)
CFileDialog有什么函数或者参数可以进行设置吗?还是需要重载?
请高手解答下,最好给出段代码研究研究
回复次数:13