广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++getcwd函数获取项目运行路径方法详解
  • 949
分享到

C++getcwd函数获取项目运行路径方法详解

2024-04-02 19:04:59 949人浏览 八月长安
摘要

头文件: 在unix下是unistd.h,VS下是direct.h 代码: #include <stdio.h> #include <string> // 区

头文件:

在unix下是unistd.h,VS下是direct.h

代码:

#include <stdio.h>
#include <string>
// 区分此函数是在windows环境调用还是linux环境调用
#if defined (_WIN64) || defined (WIN32) || defined (_WIN32)
//printf("---Windows---\n");
#include <direct.h>
#else
//printf("---Linux---\n");
#include <unistd.h>
#endif

std::string getOperationFilePath() {
	char *buffer = NULL;
	// 区分此函数是在Windows环境调用还是Linux环境调用
#if defined (_WIN64) || defined (WIN32) || defined (_WIN32)
	// 获取项目的工作路径
	buffer = _getcwd(NULL, 0);
#else
	// 获取项目的工作路径
	buffer = getcwd(NULL, 0);
#endif
	if (buffer) {
		std::string path = buffer;
		free(buffer);
		return path ;
	}
	return "";
}

测试运行:

int main(void) {
	printf("getOperationFilePath = %s\n", getOperationFilePath().c_str());
	system("pause");
	return 0;
}

在VS中运行截图:

直接运行.exe截图:

解释上面提到的问题:

这里解释一下运行路径,即是程序开始运行的路径,例如:

  • 如果是在Windows环境的VS编译器中运行项目,则返回的是项目路径,即代码文件路径(.h和.cpp路径),因为是在编译器中运行的项目,所以程序的运行路径也是才项目路径中开始运行的。
  • 如果是在Windows环境,运行已经编译好的.exe程序,则返回的是当前.exe程序所在的路径,因为是在当前路径所运行的!
  • 在Linux环境,返回的都是可执行程序的路径!

Windows有一个api可以直接获得项目的运行路径,不用区分是在项目中运行还是.exe运行!

头文件:

#include < Windows.h >

#include <Windows.h>
int main(void) {
	char path[1024] = { 0 };
	GetModuleFileNameA(NULL, path, MAX_PATH);		// 获取到完整路径,如:E:\Tools\qq.exe
	*strrchr(path, '\\') = '\0';					// 截取路径,如:E:\Tools
	printf("paht = %s\n", path);
	system("pause");
	return 0;
}

运行截图:

如果把代码:*strrchr(path, ‘\’) = ‘\0’; // 截取路径,如:E:\Tools

注释掉,则可以获得全路径:

如果第一种方式没法正确获取的话,可以尝试使用此种方式:

头文件: #include < unistd.h >

linux系统中有个符号链接:/proc/self/exe它代表当前程序,可以用readlink读取它的源路径就可以获取当前程序的绝对路径了。

std::string getOperationFilePath() {
    char buf[256] = { 0 };
    int ret = readlink("/proc/self/exe", buf, 256);
    if (ret < 0) {
        printf("%d: readlink error:%s", __LINE__, strerror(errno));
        return "";
    }
    *strrchr(buf, '/') = '\0';      // 去掉可执行程序名  /tmp/test/a.exe    ==>     /tmp/test
    return buf;
}

总结

这也是一个小小的细节问题,也有点小坑,今天这个坑我踩过,下次就不会再踩了。

到此这篇关于c++ getcwd函数获取项目运行路径方法详解的文章就介绍到这了,更多相关C++ getcwd函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++getcwd函数获取项目运行路径方法详解

本文链接: https://www.lsjlt.com/news/168979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作