[WinAPI] API 12 [获取程序所在的目录、程序模块路径,获取和设置当前目录]

简介:


 

 

Windows系统提供一组API实现对程序运行时相关目录的获取和设置。用户可以使用GetCurrentDirectorySetCurrentDirectory获取程序的当前目录,获取模块的路径使用
GetModuleFileName,如果以NULL参数调用GetModuleFileName,将会返回当前模块的路径。如果在程序主模块(exe)中获取当前模块路径,便可以从当前模块的路径中提取出程序运行时所在的路径

 

(1)GetCurrentDirectory。
获取进程的当前目录

◇参数
nBufferLength:输入参数,存储路径字符串缓冲区的大小,一般调用MAX PATH。
lpBuffer:输出参数,指向获取的路径字符串。
◇返回值
返回DWORD值,如果为0,表示执行失败,可以使用GetLastError获取错误信息;如果为非0,则获取的路径字符串长度,函数执行成功。

 

(2)SetCurrentDirectory。
设置进程的当前目录

◇参数
lpPathName:输入参数,所要设置的路径值。
◇返回值
返回DWORD值,如果为0,表示执行失败,可以使用GetLastError获取错误信息;如果为非0,则执行成功。

 

(3)GetModuleFileName。
获取模块文件名,当第一个参数为NULL时获取当前模块路径

◇参数
hModule:输入参数,所要获取模块路径的模块句柄。
lpFilename:输出参数,模块的全路径。
nSize:输入参数,lpFilename所指向的缓冲区的大小。
◇返回值
返回DWORD值,如果为0,表示执行失败;如果为非O,则执行成功,表示获取的路径的字符串长度。
◇使用说明
可以使用GetLastError获取错误信息,如果返回值为nSize指明的大小,那么很有能是因为缓冲区太小,这时使用GetLastError,会得到ERROR_INSUFFICIENT_- BUFFER。

 

>>>本实例首先获取并打印出程序的当前路径,如果程序的当前路径没有经过设置,默认情况下将是程序运行时所在的目录。然后将当前目录设置为“D:\”,设置完成后,使用相对路径创建的目录,目的是验证相对路径是相对于进程的当前路径的,而不是可执行文件所在的路径。然后使用GetModuleFileName获取了本模块和kerne132.exe的路径。

>>>通过本实例读者需了解的注意事项如下。
◇在进程中使用相对路径,则相对路径的起始点是程序的当前路径而不是可执行文件所在的路径。
◇进程的当前路径在默认情况下是应用程序可执行文件所在的路径。

◇模块路径与程序的当前路径是两个概念,进程的主程序和进程中所加载的所有DLL都是进程的模块。

 

 

复制代码
 1 #include <Windows.h>
 2 #include <stdio.h>
 3 
 4 int main()
 5 {
 6     //用于存储当前路径
 7     CHAR szCurrentDirectory[MAX_PATH];
 8     //用于存储模块路径
 9     CHAR szMoudlePath[MAX_PATH];
10     //Kernel32文件名与句柄
11     LPSTR szKernel32="kernel32.dll";
12     HMODULE hKernel32;
13     //当前路径长度,也用于判断是否获取成功
14     DWORD dwCurDirPathLen;
15     //获取进程当前目录
16     dwCurDirPathLen=
17         GetCurrentDirectoryA(MAX_PATH,szCurrentDirectory);
18     if(dwCurDirPathLen==0)
19     {
20         printf("获取当前目录错误。\n");
21         return 0;
22     }
23     printf("进程当前目录为 %s \n",szCurrentDirectory);
24 
25     //将进程当前目录设为"D:\"
26     lstrcpyA(szCurrentDirectory,"D:\\");
27     if(!SetCurrentDirectoryA(szCurrentDirectory))
28     {
29         printf("获取当前目录错误。\n");
30         return 0;
31     }
32     printf("已设置当前目录为 %s \n",szCurrentDirectory);
33 
34     //在当前目录下创建子目录"current_dir"
35     //运行完后D:盘下将出现"current_dir"文件夹
36     CreateDirectoryA("current_dir",NULL);
37 
38     //再次获取系统当前目录
39     dwCurDirPathLen=
40         GetCurrentDirectoryA(MAX_PATH,szCurrentDirectory);
41     if(dwCurDirPathLen==0)
42     {
43         printf("获取当前目录错误。\n");
44         return 0;
45     }
46     printf("GetCurrentDirectoryA获取当前目录为 %s \n",szCurrentDirectory);
47 
48     //使用NULL参数,获取本模块路径
49     if(!GetModuleFileNameA(NULL,szMoudlePath,MAX_PATH))
50     {
51         printf("获取模块路径错误。\n");
52         return 0;
53     }
54     printf("本模块路径 %s \n",szMoudlePath);
55 
56     //获取Kernel32.dll的模块句柄
57     hKernel32=LoadLibraryA(szKernel32);
58 
59     //使用Kernel32.dll的句柄模块,获取其路径
60     if(!GetModuleFileNameA(hKernel32,szMoudlePath,MAX_PATH))
61     {
62         printf("获取模块路径错误。\n");
63         return 0;
64     }
65     printf("kernel32模块路径 %s \n",szMoudlePath);
66 
67     return 0;
68 }
复制代码
相关文章
|
8月前
|
人工智能 监控 搜索推荐
抖音电商API短视频种草,转化路径缩短70%!
在电商竞争激烈的当下,抖音电商API通过短视频种草功能,将用户购买路径缩短70%,大幅提升转化效率。本文解析其技术原理与实际应用,揭示其如何改变传统电商流程,助力商家抢占市场先机。
550 0
|
7月前
|
JSON 供应链 API
‌1688图片搜索API技术内幕:从特征提取到向量匹配的完整实现路径
1688图片搜索相似商品API基于计算机视觉技术,支持通过图片查找同款或相似商品,适用于电商选品与供应链管理。API采用RESTful设计,支持JPG/PNG格式,返回含商品ID、标题、价格、销量等JSON数据,提供Python调用示例。前往体验:c0b.cc/R4rbK2
|
7月前
|
数据采集 API
京东:调用用户行为API分析购买路径,优化页面跳转逻辑
京东通过整合用户行为API,构建购买路径分析体系,运用马尔可夫链模型识别高损耗、断裂与冗余路径,优化页面跳转逻辑。实施流程合并、预加载及实时干预策略,转化率提升30.2%,路径缩短34.9%,跳转失败率下降78.7%,实现数据驱动的精细化运营。
565 0
|
7月前
|
人工智能 搜索推荐 NoSQL
唯品会:利用直播带货API实现边看边买,缩短转化路径
唯品会通过直播带货API重构电商体验,实现“边看边买”即时决策,平均转化时间从8.2分钟降至1.5分钟,弃单率下降62%,支撑百万级并发,错误率低于0.001%。技术突破推动人货场关系重塑,未来将迈向实时化、沉浸式、无感支付新标准。
378 0
|
7月前
|
存储 JSON 监控
亚马逊:调用促销管理API设置跨店满赠,提升客单价
本文介绍了如何通过亚马逊SP-API实现跨店满赠促销,提升卖家客单价。内容涵盖概念、优势、API调用步骤及代码示例,助力自动化高效促销部署。
392 0
|
8月前
|
监控 搜索推荐 算法
小红书电商 API 接口:开启小红书种草商品销售转化新路径
小红书电商 API 接口打通“种草”与销售链路,助力商家实现高效转化。通过自动化数据对接、精准营销与个性化推荐,提升运营效率,降低人力成本,推动销售增长。
387 0
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
数据采集 算法 Java
如何在Java爬虫中设置动态延迟以避免API限制
如何在Java爬虫中设置动态延迟以避免API限制
|
缓存 API 网络架构
Nuxt Kit API :路径解析工具
【9月更文挑战第20天】在 Nuxt Kit API 中,路径解析工具如 `resolvePath()`、`joinPaths()` 和 `relativePath()` 帮助开发者高效处理应用路径,确保资源准确加载,并支持动态路由与组件导入。这些工具提升了应用的灵活性和可扩展性,同时需注意路径准确性、跨平台兼容性和性能优化,以提升用户体验。
202 12
|
前端开发 API 网络架构
【Azure 应用服务】能否通过 Authentication 模块配置 Azure AD 保护 API 应用?
【Azure 应用服务】能否通过 Authentication 模块配置 Azure AD 保护 API 应用?
179 1