最近在调试程序的时候发现,如果一个窗体用到不止一个“打开文件对话框”的话,分开操作是成功的,但当一个执行了,别的就不能执行了。
最后发现,是因为打开文件对话框在打开文件的同时会“改变系统的当前路径”,如果下一次文件操作用的是相对目录的命令,则会出现问题。
解决办法有两个:
1、用绝对路径。
2、设置让CFileDialog不改变系统当前路径。
CFileDialog的构造函数如下:
CFileDialog(
BOOL bOpenFileDialog, //TRUE:打开文件对话框;FALSE:保存文件对话框
LPCTSTR lpszDefExt = NULL, //默认的文件扩展名
LPCTSTR lpszFileName = NULL, //默认的文件名
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //对话框个性化设置标志
LPCTSTR lpszFilter = NULL, //文件类型过滤
CWnd* pParentWnd = NULL //此对话框的你窗体指针
);
所以为了不让CFileDialog不改变系统当前路径,做如下设置:
CFileDialog dlg(TRUE, NULL, NULL, OFN_EXPLORER|OFN_NOCHANGEDIR, "Text Files(*.txt)|*.txt|All Files(*.*)|*.*||", this );
注意红色标记的部分。