Ⅰ、获取相对路径
如果当前打开的文件中要寻找同级的目录文件就要用到 .\或者 ./ VC编译器都可以识别。例如#define ".\XX\XX\xx.h"
如果当前打开的文件中要寻找在上级的目录文件就要用到 ..\ 或者 ../ VC编译器都可以识别。例如#define "..\XX\XX\xx.h"
通过这样简单的标识,vc相对路径的问题就解决了,这样也就避免了设置繁琐的系统路径。当然了,设置相对路径要在编码的时候对文件的存放层次关系特别清楚,否则统一修改路径将会带来很大的工作量。
Ⅱ、绝对路径
方法1:
CString strPath;
GetCurrentDirectory(MAX_PATH,strPath.GetBuffer(MAX_PATH));
strPath.ReleaseBuffer();
filename=strPath+"\\"+dlg.GetFileName();
方法2:
使用GetModuleFileName(NULL,exeFullPath,MAX_PATH);//得到程序模块名称,全路径
[cpp] view plaincopyprint?
- CString strPath;
- GetModuleFileName(NULL,strPath,MAX_PATH);
- strPath.ReleaseBuffer();
- filename=strPath+"\\文件名.*";
在开发工程中,往往需要知道当前程序本身所在目录。一种方法是在程序安装的时候利用安装程序把文件路径写入注册表。在较大的程序中,这种方法比较常用;另一种,就是在程序得到路径。这样,程序随便移动到哪里,都可以得到正确的路径。这也是本文介绍的方法。
.\\是的到应用程序的当前目录,但当前目录不一定等于应用程序执行文件的所在目录,一个应用程序被启动时,当前目录是可以被任意设置的;
GetModuleFileName()得到模块的完整路径名,例如,你载入c:\windows\system32\a.dll,得到模块句柄h,则你可以用GetModuleFileName()得到h模块的完整路径名。
实例:
CString strPath;
CString filePath;
CString GetFilePath()
{
TCHAR pFileName[MAX_PATH + 1];
GetModuleFileName(NULL, pFileName, MAX_PATH);
strPath = pFileName;
CString strPath1,strPath2;
strPath1 = strPath.Left(strPath.ReverseFind('\\'));//strPath1=E:\A项目\HIDD\Main\Debug
strPath2 = strPath1.Left(strPath1.ReverseFind('\\'));//strPath2=E:\A项目\HIDD\Main
filePath = strPath2 + "\\";
return filePath;// filePath=E:\A项目\HIDD\Main\
}
应用
CString strXmlPath;
strXmlPath.Format(_T("%s%s"),GetFilePath(),_T("Configure\\SoundFile.xml"));
//strXmlPath=E:\A项目\HIDD\Main\Configure\\SoundFile.xml