首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的实际路径是什么,如何获得相对路径?

C++中的实际路径是什么,如何获得相对路径?
EN

Stack Overflow用户
提问于 2021-08-25 00:56:15
回答 2查看 728关注 0票数 1

嘿,伙计们,我开始学C++了,有一件事我不明白--我的实际道路是什么?

因此,例如,在Python中,xyz.py的实际路径是我运行python3 xyz.py的地方。但是,它在C++中是如何工作的?

我的C++项目如下所示:

代码语言:javascript
复制
--build
--data
  --exampleData
--src
  --example1
    --include
    --src
      -FileToRun.cc

我将我的项目"example1“构建到build目录。在我的项目中,我想打开exampleData,它的相对路径是什么?它与FileToRun.cc的位置有关吗?还是它取决于我如何执行它,就像在Python中一样?还是别的什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-25 01:18:17

相对路径相对于调用进程的当前工作目录,无论该路径在使用时位于何处。工作目录可以由父进程指定。或在当前进程的生存期内动态更改。因此,您不能真正依赖于工作目录在任何给定时刻都是您所期望的位置。

您的C++应用程序的默认工作目录可能是您的build文件夹,这取决于您的配置,但它肯定不是您的src文件夹,除非您以这种方式显式设置它(例如,打开一个终端到src文件夹,然后运行可执行文件而不更改文件夹)。或创建可执行文件的快捷方式,并在快捷方式的属性中设置工作目录)。

这在PythonandC++和任何其他语言中都是一样的,因为它是操作系统的特性,而不是应用程序。

如果要确保相对路径相对于可执行文件(或任何其他根),则应在运行时将它们转换为绝对路径。检索可执行文件的绝对文件夹路径(例如在Windows上使用GetModuleFileName()main()中的argv[0]等,然后删除可执行文件的文件名),或者任何您想要的绝对根。然后附加你的相对路径。然后根据需要解析任何剩余的./..

因此,例如,如果您有<path>/build/example1.exe并且希望访问<path>/data/exampleData,那么您可以

  • <path>/build/example1.exe开始
  • 去掉文件名以获得<path>/build/
  • 附加../data/exampleData以获取<path>/build/../data/exampleData
  • /build/../data/解析为/data/
  • 这样就把你留给了<path>/data/exampleData

有一些API可以帮助完成这一任务。例如Windows上的PathCombine()/PathAppend()/PathCanonicalize()PathRemoveFileSpec()。或者图书馆 in C++17。

票数 2
EN

Stack Overflow用户

发布于 2021-08-25 01:49:12

我想你是在问什么是current working directory。( CWD)在运行可执行文件时,如何访问位于某个目录中的数据。

这取决于您如何运行可执行文件。

  1. 如果您从终端运行它,那么运行可执行文件的当前目录很可能是CWD。在这种情况下,您应该已经知道如何获得相对路径。
  2. 如果您通过IDE(例如Windows上的Visual )运行它,那么build目录很可能是CWD,因为VS倾向于将输出目录设置为CWD。在这种情况下,我建议您检查项目设置,因为我刚才说的在IDE中完全可以自定义。如果在设置中将build设置为CWD,则可以通过../data/exampleData/<your file>访问数据。

虽然您可以在IDE中设置#2的CWD,但是在释放可执行文件之后,您可能会发现很难找到包含数据的目录。(也就是说,您将其构建为发布版本以发布它),因为由于#1中所描述的原因,相对路径可能会根据运行可执行文件的位置而改变。因此,我建议您解决这个问题,就是通过显式调用程序中的系统函数,将可执行文件所在的目录设置为CWD,从而使您的可执行文件能够始终找到您的资产,无论您如何运行它。

  • 在Windows上,您可以使用SetCurrentDirectory (链接)。
  • 在Linux-ish系统上,可以使用chdir (链接)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68915589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档