我想新建一个项目文件夹,运行程序生成文件后直接存入该文件夹,看了很多cfiledialog的说明,都说会直接改变默认路径到这个生成的文件夹下,刚好满足要求。但是实际操作后发现默认路径并没有改变。
cfiledialog不是在MFC主对话框cpp内使用的,而是在其他对话框内调用,是不是因为这个原因,才导致默认路径是MFC程序所在路径?
CFileDialog FileDlg(TRUE,_T("*.exe"),NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("Exe files(*.exe)|*.exe|All files (*.*)|*.*||"));
FileDlg.m_ofn.lpstrInitialDir=_T("D:\\"); //设置默认目录
if(FileDlg.DoModal()==IDOK)
{
}
void StartDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
//////////////使用CFileDialog后,程序当前路径会变为选中文件的路径????????????????////////////////////////////////////
BOOL isOpen = TRUE; //是否打开(否则为保存)
CString defaultDir = L""; //默认的文件扩展名
CString fileName = L"Label.dddd"; //默认的文件名
CString filter = L"LabelFile (*.dddd)|*.dddd||"; //可选择文件的类型
CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, filter, NULL);
openFileDlg.m_ofn.lpstrInitialDir = _T("G:\\Project"); //////////默认文件路径设置
if(openFileDlg.DoModal() == IDOK)
{
defaultDir = openFileDlg.GetPathName();
FolderPath = openFileDlg.GetFolderPath();
}
if (PathFileExists(defaultDir))
{
/////////////////////////符合项目要求(有Label.dddd文件)则保存其所在文件夹路径至编辑框
CWnd::SetDlgItemTextW(IDC_Path, defaultDir);
}
else
{
/////////////////不符合项目要求(没有Label.dddd文件)则报错
ErrorReportDlg1 m_errordlg1;
m_errordlg1.DoModal();
}
}
在这个Button2里面调用了CFileDialog..就是想打开一个已有项目,然后在这个已有项目文件夹下进行读取和存储txt文件,在每个项目下我放了Label.dddd这个文件作为标识,如果有这个文件说明符合项目要求,没有则说明不是项目文件。
这样打开一个已有项目后,就是说CFileDialog函数已经调用过了,但是通过验证我发现此时的路径仍然是主程序所在的路径,并非打开的项目文件所在路径,这到底是什么原因啊·············
另外,如果不能改变当前程序路径的话,我想通过GetFolderPath获得打开的项目所在文件夹路径,一个CString形式的路径。在后面的程序中,我用的是指针来打开文件,即
FILE *fp1;
fp1 = fopen("SetData.txt","r");
通过这样打开SetData.txt这个文件,但是这个文件必须放在程序根目录下才能被打开,如果想要打开项目文件夹里的txt文件,怎样才能在文件名前面加上刚才CString形式的项目路径呢?
那个默认路径是一直会变化的,你应该做一个保存,下次打开对话框,每次把那个地址传进去,设成默认的地址。