关于获取当前路径的问题
在开发软件里,常常碰到要读取当前目录下的配置参数文件,或者打开当前目录下别的程序来运行,那么就需要获取当前进程的目录位置,
主要有两个函数来实现
1.函数GetCurrentDirectory获取当前进程所有在的目录。同时也可以使用SetCurrentDirectory函数来改变进程的当前目录。
DWORD GetCurrentDirectory(
DWORD nBufferLength, // size of directory buffer
LPTSTR lpBuffer // directory buffer
);
函数功能
找到当前进程的当前目录
参数说明
参数 类型及说明
nBufferLength lpBuffer缓冲区的长度
lpBuffer 指定一个预定义字串,用于装载当前目录
返回值
调用成功 返回装载到lpBuffer的字节数。
如nBufferLength的长度不够,不足以容纳目录,则返回值是必要的缓冲区长度(要求至少这个长度),其中包括空中止字符。零表示失败。使用GetLastError函数可获得错误信息
2.函数原型:
DWORD GetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
函数参数说明:
hModule HMODULE 装载一个程序实例的句柄。如果该参数为NULL,该函数返回该当前应用程序全路径。
lpFileName LPTSTR 是你存放返回的名字的内存块的指针,是一个输出参数
nSize DWORD ,装载到缓冲区lpFileName的最大值
函数返回值:
如果返回为成功,将在lpFileName的缓冲区当中返回相应模块的路径,如果所为的nSize过小,哪么返回仅按所设置缓冲区大小返回相应字符串内容。
如果函数失败,返回值将为0,并返回GetLastError异常代码。
需要的头文件为:
include Windows.h
两个简单的例子,做个对比
TCHAR Buffer[MAX_PATH];
DWORD dwRet;
// 获取当前目录
dwRet = GetCurrentDirectory(BUFSIZE, Buffer);
TCHAR *path = new TCHAR[MAX_PATH];
ZeroMemory(path, MAX_PATH);
// path == "d:/Project/Test/MFC/MFC"
GetCurrentDirectory(MAX_PATH, path);
// path == "d:/Project/Test/MFC/debug/MFC.exe"
GetModuleFileName(NULL,path,MAX_PATH);
可以将第二个函数加以变化一下
CString GetMoudlePath(HMOUDLE hModule)
{
TCHAR buf[MAX_PATH]={'/0'};
CString strDir,strTemp;
GetMoudleFileName(hMoudle,buf,MAX_PATH);
strTemp=buf;
strDir=strTemp.left(strTemp.ReverseFind('//')+1);
return strDir;
}
另外再提到两个函数
CreateDirectory和RemoveDirectory函数
Windows API函数CreateDirectory创建目录,当然目录过多时也需要调用函数RemoveDirectory来删除不需要的目录,然而函数RemoveDirectory只能删除空的目录,也就是目录下没有文件和子目录才能删除。