VC获取当前程序文件的路径,文件名以及路径+文件名

1.方法1

   char pBuf[MAX_PATH];                                               //存放路径的变量

   GetCurrentDirectory(MAX_PATH,pBuf);                   //获取程序的当前目录

   strcat(pBuf,"//");

   strcat(pBuf,AfxGetApp()->m_pszExeName);  

   strcat(pBuf,".exe");                                                       //获取程序的全文件名

2.方法2

   //函数返回应用程序所在的路径  

   CString    CClientApp::ReturnPath()  

   {  

   CString    sPath;  

   GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);  

   sPath.ReleaseBuffer    ();  

   int    nPos;  

   nPos=sPath.ReverseFind('//');  

   sPath=sPath.Left(nPos);  

   return    sPath;  

   }

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

CFileDialog dlg(TRUE)

CFileDialog dlg(TRUE);//<-这里用TRUE与FALSE有什么不同?

     // TRUE是“打开”对话框
     // FALSE是“另存为”对话框
int ret=dlg.DoModal();
if(ret==IDOK)
{
CString pathname=dlg.GetPathName();  //得到文件所在路径+文件名
CString filename=dlg.GetFileName(); //得到文件名
char tbuf[120];
sprintf(tbuf,"The %s file in %s is saved!",filename,pathname);
AfxMessageBox(tbuf);

}

1.GetCurrentDirectory ,由于打开,保存文件对话框都会改变当前路径,一般不建议使用这个
2.GetModuleFileName  头文件 Header: Declared in Winbase.h; include Windows.h.

 

转自::http://blog.csdn.net/liviatt/archive/2008/12/08/3474094.aspx  

 

 

以下的SfxGetModulePath函数也可实现获取当前程序的路径:

 

需包含头文件#include "Shlwapi.h"
#pragma comment(lib,"shlwapi.lib")

 

//SfxGetpathSplit return part of a full filename,such as drive,dir,filename,title,ext,ect...
CString SfxGetPathSplit(LPCTSTR szFullFileName,DWORD dwFlags)
{
 TCHAR szBuf[MAX_PATH];
 szBuf[0] = _T('/0');

 CString szRet;
 if(dwFlags == PS_EXT)
 {
  _tsplitpath(szFullFileName, NULL, NULL, NULL, szBuf);
  szRet = szBuf;
  if(!szRet.IsEmpty() && szRet[0] == _T('.'))
  {
   szRet.Remove(_T('.'));
   return szRet;
  }
 }
 else if(dwFlags == PS_DRIVE)
 {
  _tsplitpath(szFullFileName, szBuf, NULL, NULL, NULL);
  return szBuf;
 }
 else if(dwFlags == PS_TITLE)
 {
  _tsplitpath(szFullFileName, NULL,NULL,szBuf,NULL);
  return szBuf;
 }
 else if(dwFlags == PS_DIR)
 {
  TCHAR szDir[MAX_PATH];

  _tsplitpath(szFullFileName, szBuf, szDir, NULL, NULL);
  ::lstrcat(szBuf, szDir);
  szRet = szBuf;
  if(!szRet.IsEmpty() && szRet.Right(1) == _T('//'))
   szRet = szRet.Left(szRet.GetLength()-1);
  return szRet;
 }
 else if(dwFlags == PS_FILENAME)
 {
  szRet = szFullFileName;
  int nPos = szRet.ReverseFind(_T('//'));
  if(nPos != -1)
   szRet = szRet.Right(szRet.GetLength() - nPos -1);
  return szRet;
 }

 return "";
}

 

 

 

CString SfxGetModulePath(HINSTANCE hInst)
{
 TCHAR szBuf[MAX_PATH];
 GetModuleFileName(hInst,szBuf,MAX_PATH);
 CString szPath(szBuf);
 szPath = SfxGetPathSplit(szPath,PS_DIR);
 return szPath;
}

你可能感兴趣的:(VC获取当前程序文件的路径,文件名以及路径+文件名)