【C++】获取当前文件所在绝对路径 && GetCurrentDirectory()函数使用详解

1

编写的工程项目有如下需求:

获取当前工程所在目录的绝对路径

2

使用<Windows.h>中的GetCurrentDirectory方法实现,单独编写验证程序如下:

#include<iostream>
#include<Windows.h>
using namespace std;
int main(void) 
{
	char  buf[1000];
	GetCurrentDirectory(1000, buf);
	cout << buf << endl;
	system("pause");
	return 0;
}

3

所在库:<Windows.h>

函数原型:

DWORD GetCurrentDirectory(
  [in]  DWORD  nBufferLength,
  [out] LPTSTR lpBuffer
);

参数说明:

[in] nBufferLength:存储目录字符串的缓冲区长度,以TCHARs为单位,需要包括终止字符NULL的空间
[out] lpBuffer:指针,指向一块缓冲区,用于接收结果(当前目录绝对路径)字符串,以NULL为结尾。

返回值

执行成功:返回写入缓冲区的字符数(不包括终止null);
执行失败:返回值为0;

缓冲区不够大时将返回指定缓冲区所需大小,以字符为单位(包括终止null)。
故可以通过GetCurrentDirectory(0, NULL);获取缓冲区所需大小,再进行缓冲区初始化完成创建。

参考:GetCurrentDirectory function (winbase.h)

4

报错

使用 Visual Studio 2019 编译器,出现报错"char *"类型的实参与"LPWSTR"类型的形参不兼容
出现报错

原因

字符集问题,具体可检索查阅。

解决

配置解决方案的属性,在(配置属性->高级->高级属性)中找到字符集,将其更改为使用多字节字符集
修改属性配置解决问题

保姆级操作教程:顶部功能栏中点击视图,选择点击解决方案资源管理器,右键点击解决方案名称(工程名),选择属性,进入上图属性配置页。余下按图配置即可。

5

关于返回结果需要注意:
使用release x64编译时候,返回的是cpp文件所在路径;
执行exe文件时候,返回的是可执行文件所在目录。

编译运行结果编译运行结果

可执行文件执行结果可执行文件执行结果
命名混乱是因为随便搞的,有点蠢,敬请忽略吧[捂脸]。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,可以使用不同的方法来获取当前路径。其中一种方法是使用Windows.h头文件中的GetCurrentDirectory函数。这个函数的原型是DWORD GetCurrentDirectory(\[in\] DWORD nBufferLength, \[out\] LPTSTR lpBuffer)。你可以在程序中包含Windows.h头文件,并使用GetCurrentDirectory函数获取当前路径。例如,你可以使用以下代码来获取当前路径: #include <iostream> #include <Windows.h> using namespace std; int main(void) { char buf\[1000\]; GetCurrentDirectory(1000, buf); cout << buf << endl; system("pause"); return 0; } 另一种方法是使用getcwd函数。你可以在程序中包含头文件<direct.h>,并使用getcwd函数获取当前路径。例如,你可以使用以下代码来获取当前路径: #include <iostream> #include <direct.h> using namespace std; int main(void) { char *buffer; buffer = getcwd(NULL, MAX_PATH); if (buffer != NULL) { cout << buffer << endl; } return 0; } 除了以上两种方法,还可以使用GetModuleFileName函数获取当前路径。你可以在程序中包含Windows.h头文件,并使用GetModuleFileName函数获取当前路径。例如,你可以使用以下代码来获取当前路径: #include <iostream> #include <Windows.h> using namespace std; int main(void) { char defaultPath\[MAX_PATH\]; GetModuleFileName(NULL, defaultPath, MAX_PATH); cout << defaultPath << endl; return 0; } 希望这些方法能够帮助到你获取C++ Windows中的当前路径。 #### 引用[.reference_title] - *1* *3* [C++ 获取当前程序路径](https://blog.csdn.net/jg_csdn/article/details/129436817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【C++】获取当前文件所在绝对路径 && GetCurrentDirectory()函数使用详解](https://blog.csdn.net/Miller_6/article/details/125804594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值