我想用CFileDialog打开我的应用程序所在的当前路径,关键代码如下。但是就是不起作用,每次打开时都是前一次打开的文件路径。
奇怪的是,如果我直接把打开路径设置为C盘,CFileDialog就很听话地打开C盘。而我如果是程序动态获取的位置,CFileDialog就是不听使唤。
太奇怪了,谁能解决这个问题,分数全部相送,谢谢各位啦~~~~~~~~~
----------------------------------------------------------------------
CString historyData;
CFileDialog myFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"txt files (*.txt)|*.txt|All files (*.*)|*.*",NULL);
myFileDialog.m_ofn.lpstrInitialDir = GetExePath();//???为什么不起作用呢?用"C:\\"却起作用
//myFileDialog.m_ofn.lpstrInitialDir = "C:\\";
if(myFileDialog.DoModal()==IDOK)
historyData=myFileDialog.GetPathName();
else
return;
----------------------------------------------------------------------
GetPathName的函数定义如下,我调试过没有问题,用MessageBox把返回值弹出来正好是应用程序所在的目录,如放在C盘的话,返回值是"C:\"//获得当前程序所在的路径
char* CMySnifferDlg::GetExePath()
{
char buff[255];
GetModuleFileName(NULL,buff,254);//程序完整路径加程序名
int len=strlen(buff);
while(len>0 && buff[len-1] !='\\')len--;//去掉程序名,得到路径
buff[len]=0;
char *str=buff;
return str;
}
奇怪的是,如果我直接把打开路径设置为C盘,CFileDialog就很听话地打开C盘。而我如果是程序动态获取的位置,CFileDialog就是不听使唤。
太奇怪了,谁能解决这个问题,分数全部相送,谢谢各位啦~~~~~~~~~
----------------------------------------------------------------------
CString historyData;
CFileDialog myFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"txt files (*.txt)|*.txt|All files (*.*)|*.*",NULL);
myFileDialog.m_ofn.lpstrInitialDir = GetExePath();//???为什么不起作用呢?用"C:\\"却起作用
//myFileDialog.m_ofn.lpstrInitialDir = "C:\\";
if(myFileDialog.DoModal()==IDOK)
historyData=myFileDialog.GetPathName();
else
return;
----------------------------------------------------------------------
GetPathName的函数定义如下,我调试过没有问题,用MessageBox把返回值弹出来正好是应用程序所在的目录,如放在C盘的话,返回值是"C:\"//获得当前程序所在的路径
char* CMySnifferDlg::GetExePath()
{
char buff[255];
GetModuleFileName(NULL,buff,254);//程序完整路径加程序名
int len=strlen(buff);
while(len>0 && buff[len-1] !='\\')len--;//去掉程序名,得到路径
buff[len]=0;
char *str=buff;
return str;
}
解决方案 »
- 程序运行不了
- MFC基于对话框编程中,在自定义类中如何访问CXXXDlg类中的成员变量,比如说CXXXDlg类中定义了一个m_num的成员变量,在别的类中怎样去访问呢?
- 在线等: 请说出封装MFC中类(包含成员变量和成员函数,封装成dll或com)的步骤和Delphi中调用的步骤?
- 关于VC++的学习,请指教
- 求助:各位大哥,帮我看看这个串口的程序,谢谢!
- opengl:如何使显示的物体开始就位于viewport的中央,并且大小适中?
- 如何得到当前在VC中Debug的程序中的所有线程.
- 怎样实现局域网中语音传输???
- 学了API后想学MFC,能不能介绍几本书的?
- VC好难学,帮兄弟一把...01
- 如何把TabCtrl嵌入到CFormView
- 求一段数据库Ado源程序实例
::GetModuleFileName(hInst, szPath, MAX_PATH);
::PathRemoveFileSpec(szPath);
myFileDialog.m_ofn.lpstrInitialDir = szPath;
currentPath = GetExePath();
myFileDialog.m_ofn.lpstrInitialDir = currentPath;这样就可以了,但是这是为什么呢?
CString historyData;
char currentPath[255];
GetExePath(currentPath);
CFileDialog myFileDialog(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"txt files (*.txt)|*.txt|All files (*.*)|*.*",NULL);
myFileDialog.m_ofn.lpstrInitialDir = currentPath;
if(myFileDialog.DoModal()==IDOK)
historyData=myFileDialog.GetPathName();
-----------------------------------------------------------------------
GetExePath函数也改了,如下,用传址的方法:
//获得当前程序所在的路径
void CMySnifferDlg::GetExePath(char *currentPath)
{
GetModuleFileName(NULL,currentPath,254);//程序完整路径加程序名
int len=strlen(currentPath);
while(len>0 && currentPath[len-1] !='\\')len--;//去掉程序名,得到路径
currentPath[len]=0;
}
-----------------------------------------------------------------------
问题解决,结帖。感谢Mackz(在相互) !
我给你发消息了,请回复,我对这个问题还是不太明白!