//获取程序所在的目录,程序模块路径,获取和设置当前目录
#include<windows.h>
#include<stdio.h>
/***************************
// int main(void)
// 功能: 演示使用设置获取当前路径
// 演示获取模块路径
********************************/
int main(void)
{
CHAR szCurrentDirectory [MAX_PATH]; //用于存储当前路径
CHAR szModulePath[MAX_PATH]; //用于存储模块路径
LPSTR szKernel32 = "kernel32.dll"; //Kernel32文件句柄
HMODULE hKernel32;
DWORD dwCurDirPathLen; //当前路径长度,也用于判断获取是否成功
//获取当前路径 GetCurrentDirctory 返回值为 DWORD 值,0表示失败
dwCurDirPathLen = GetCurrentDirectory( MAX_PATH, //路径字符串缓冲区大小
szCurrentDirectory); //输出参数,指向获取路径的字符串
if(dwCurDirPathLen == 0)
{
printf("获取当前目录错误。\n");
return 0;
}
printf("进程当前目录为%s \n",szCurrentDirectory);
//将当前目录设置为:"C:\"
lstrcpy(szCurrentDirectory, "C:\\");
//SetCurrentDirctory 返回值为 DWORD 值,0表示失败
if( !SetCurrentDirectory( szCurrentDirectory ) )
{
printf("设置当前目录错误。\n");
return 0;
}
printf("进程当前目录为%s \n",szCurrentDirectory);
//在当前目录下创建子目录“current_dir”
//运行完成后C:盘下将出现文件夹“current_dir”
CreateDirectory("current_dir", NULL);
//再次获取系统当前目录
dwCurDirPathLen = GetCurrentDirectory( MAX_PATH, szCurrentDirectory);
if(dwCurDirPathLen == 0)
{
printf("获取当前目录错误。\n");
return 0;
}
printf("GetCurrentDirectory获取当前目录为%s \n",szCurrentDirectory);
//使用NULL参数,获取本模块的路径
if(!GetModuleFileName(NULL, //NULL则是获取当前模块路径
szModulePath, //输出参数,模块的全路径
MAX_PATH)) //输入参数,指向的缓冲区大大小
{
printf("获取模块路径错误。\n");
return 0;
}
printf("本模块路径为%s \n", szModulePath);
//获取Kernel32.dll的模块句柄
hKernel32 = LoadLibrary(szKernel32); //Kernel32.dll
//使用kernel32.dll的模块句柄,获取其路径
if( !GetModuleFileName (hKernel32, szModulePath, MAX_PATH))
{
printf("获取模块路径错误.\n");
return 0;
}
printf("Kernel32模块路径 %s \n",szModulePath);
return 0;
}