GetCurrentDirectory获取的是当前路径,并不是程序文件本身所在的路径,应用程序的当前路径是可以通过SetCurrentDirectory来改变的,当你调用CFileDialog打开文件以后,这个类就会调用SetCurrentDirectory来修改当前路径,所以你在保存时使用GetCurrentDirectory获取到的肯定是上次打开文件的那个路径,要想不改变当前路径,可以参考楼上兄弟的做法,但不推荐这样做,因为你下次打开文件的时候可能还是希望在上次打开的地方来打开,这本身是一种比较人性化的功能
如果你想获取程序本身所在的路径,可用API函数GetModuleFileName来获取,这个函数获取到的就是应用程序所在的路径,无论你是否确定当前路径是否会被改变,都建议不要用GetCurrentDirectory来获取应用程序的路径,因为不可预知会改变当前路径的因素太多了
要注意区分当前路径和应用程序所在路径,例如,你给程序创建一个快捷方式,快捷方式中的起始位置那一项设置的就是当前路径,与你目标程序的路径可以不一样;同样,在VC编译器里指定的工作路径也是当前路径,这个路径同样可以与你在命令里面设置的路径不一样,都是可以修改的
该段程序实现保存文件,并且能够在保存前改变保存路径,并能调用CDocument::OnSaveDocument实现串行输入。
代码如下:
void CLADDoc::OnFileSave1() //保存按钮的响应函数
{
// TODO: Add your command handler code here
CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
const char pszFilter[] = _T("梯形图程序 (*.lad)|*.lad||");
CFileDialog dlgSave( FALSE, //FALSE为保存
_T(".lad"), //自动加上的扩展名
_T("NoName.lad"), //默认保存的文件名
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,pszFilter, pMain);
dlgSave.m_ofn.lpstrInitialDir = filePath ;
CString fileDlgName;
if (dlgSave.DoModal() == IDOK)
{
fileDlgName = dlgSave.GetPathName();
}
this->SetPathName(fileDlgName);
this->OnSaveDocument(fileDlgName);
}
CString FilePath 只保存路径即可
每个函数中在计算出实际路径
function1(){
filename = FilePath + "\" + defaultname1;
.....
.....
savefile(filename);
}
function2(){
filename = FilePath + "\" + defaultname2;
.....
.....
savefile(filename);
}
function3(){
filename = FilePath + "\" + defaultname3;
.....
.....
savefile(filename);
}