GetModuleFileName获取的是当前可执行档(exe)的绝对路径。
GetCurrentDirectory获取的是当前可执行档(exe)的工作路径。
测试代码:
void CtestDlg::Run(void)
{
TCHAR szPathName[MAX_PATH+1] = {0};
DWORD dwValue = GetModuleFileName(NULL, szPathName, MAX_PATH+1);
if (0 == dwValue)
{
ErrorExit(_T("GetModuleFileName")); //ErrorExit请参见MSDN中的GetLastError
}
SetDlgItemText(IDC_MODULE, szPathName);
GetCurrentDirectory(MAX_PATH+1, szPathName);
if (0 == dwValue)
{
ErrorExit(_T("GetModuleFileName"));
}
SetDlgItemText(IDC_CURDIR, szPathName);
}
测试结果:
注意:工程test位于d:/sample/GetModuleFileName-GetCurrentDirectory下,由上图可知在vc默认生成的工程中,GetCurrentDirectory返回的工作路径和res目录处于同一层。如果将此可执行档test.exe放到d:下,再次运行就会得到如下结果
由此可见,工作路径是动态变化的。我们也可以通过SetCurrentDirectory来设置当前工作路径。
测试代码:
void CtestDlg::Run(void)
{
TCHAR szPathName[MAX_PATH+1] = {0};
DWORD dwValue = GetModuleFileName(NULL, szPathName, MAX_PATH+1);
if (0 == dwValue)
{
ErrorExit(_T("GetModuleFileName"));
}
SetDlgItemText(IDC_MODULE, szPathName);
//GetCurrentDirectory(MAX_PATH+1, szPathName);
//if (0 == dwValue)
//{
// ErrorExit(_T("GetModuleFileName"));
//}
//SetDlgItemText(IDC_CURDIR, szPathName);
BOOL bValue = SetCurrentDirectory(_T("d://"));
if (FALSE == bValue)
{
ErrorExit(_T("SetCurrentDirectory"));
}
GetCurrentDirectory(MAX_PATH+1, szPathName);
if (0 == dwValue)
{
ErrorExit(_T("GetModuleFileName"));
}
SetDlgItemText(IDC_CURDIR, szPathName);
}
测试结果: