1. 获取执行文件所在目录 GetModuleFileName
TCHAR modulePath[MAX_PATH];
GetModuleFileName(NULL, modulePath, MAX_PATH);
CString csPath(modulePath);
csPath = csPath.Left(csPath.ReverseFind(_T('\\')));csPath = _T("\"") + csPath + _T("\\Te st\\TestPic.png") + _T("\""); //两端加一组双引号把路径全包,防止路径有空格引发意外 
GetModuleFileName原型:
DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, _Out_ LPTSTR lpFilename, _In_ DWORD nSize );
返回值:Long,如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。使用GetLastError可以打印错误信息。
参数:
hModule Long 一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL, 该函数返回该应用程序全路径。
lpFileName String 指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的 nSize Long 装载到 缓冲区lpFileName的最大字符数量
2. 获取当前工作路径1 GetCurrentDirectory
TCHAR pFileName[MAX_PATH];
int nPos = GetCurrentDirectory( MAX_PATH, pFileName);
CString csFullPath(pFileName);
if( nPos < 0 )
return CString("");
else
return csFullPath;
GetCurrentDirectory函数原型:
DWORD GetCurrentDirectory(DWORDnBufferLength,//sizeofdirectorybuffer LPTSTRlpBuffer//directorybuffer );
返回值:
Long,装载到lpBuffer的字节数。 如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度), 其中包 括空中止字符。零表示失败。会设置GetLastError。
参数表:
nBufferLength Long,lpBuffer缓冲区的长度 lpBuffer String,指定一个预定义字串,用于装载当前目录。
注意:
如果debug跟踪,获取的路径是工程文件(dsp)所在,因为当前工作路径就是工程路径 如果直接运行exe文件,获取的路径即exe所在路径。
补充知识:
.dsp:VC开发环境生成的工程文件,文本格式。
.dsw:VC开发环境生成的项目文件,用来把多个工程组织到一个项目中,文本格式。
3. 获取当前工作目录2 _getcwd (getcwd)
<strong> </strong> char path[_MAX_PATH];
_getcwd(path,_MAX_PATH); //获取工作路径
printf("当前工作目录:\n%s\n",path);
//额外加一个修改路径函数
if((_chdir("d:\\visualc++"))==0) //修改工作路径
{
printf("修改工作路径成功\n");
_getcwd(path,_MAX_PATH);
printf("当前工作目录:\n%s\n",path);
}
else
{
perror("修改工作路径失败"); exit(1);
}
修改当前工作路径意义请参见:http://bbs.csdn.net/topics/390871627
4. 路径分解函数: _splitpath
<span style="font-size:14px;"> char* cPath = "D:\\Projects\\AddQuoteForPath\\Debug\\AddQuoteForPath.exe";
char drive[_MAX_DRIVE];//磁盘名
char dir[_MAX_DIR];//路径名
char fname[_MAX_FNAME];//文件名
char ext[_MAX_EXT];//扩展名
_splitpath(cPath, drive, dir, fname, ext );
CString sDrive(drive);//磁盘名
CString sDir(dir);//文件路径
CString sFileName(fname);//取出文件路径后的文件名
CString sExt(ext);//文件扩展名</span>
对应有:
1、与之相反的为:_makepath,实现生成路径的功能。
_makepath( path_buffer, "c", "\\sample\\crt\\", "makepath", "cpp" );
// c不需要加":",但是加多个例如"c::::" 或干脆为"cd"也未出错,应该是取开头第一个字符
2、FindFirstFile函数:到一个文件夹(包括子文件夹)去搜索指定文件 。
WIN32_FIND_DATA p; HANDLE h=FindFirstFile("e:\\test\\*.c",&p); puts(p.cFileName);
本文介绍了在Windows环境下如何通过多种方式获取执行文件所在目录、当前工作路径,并提供了路径分解及修改当前工作目录的方法。
1165

被折叠的 条评论
为什么被折叠?



