gpt4 book ai didi

c++ - 打开相对于已执行模块的文件

转载 作者:太空狗 更新时间:2023-10-29 23:20:01 25 4
gpt4 key购买 nike

我知道,打开一个文件并限制它与已执行模块放在同一个目录中并不是最好的主意。但是,有一个工具,我被命令按照这些规范进行编程。

文件路径有一个参数,可以是文件的绝对路径,也可以只是假设文件位于当前目录中的文件名。

我不想使用 WinAPI 函数 GetCurrentDirectory 来保持可移植性。如果无法打开文件,该工具应该会失败。

通常我使用 boost::filesystem 作为 I/O 库。因此,我对 std-library 不是很熟悉。

我的第一个想法是将文件路径传递给 std::ifstream::open()。但这似乎不适用于相对路径。

我该怎么做才能满足我的要求?

最佳答案

不幸的是,没有容易移植的方法来做到这一点。特别是,GetCurrentDirectory 可能不会返回与您的可执行模块相同的目录 - 在 Windows 上,只需打开一个通用对话框文件选择框就会导致您的当前目录发生变化!在其他平台上,您根本不可能从同一目录开始(话又说回来,您可能也没有写入权限,但这也适用于现代 Windows...)

在 Windows 上,一般来说,您需要使用 GetModuleFileName 来查找模块的位置,然后去掉文件名部分。在 Linux 上,在 /proc/self/exe 上调用 readlink 作为主可执行文件,或者在 /proc/self/maps 中寻找映射对应于动态库的代码段。在其他操作系统上,我不知道。

关于c++ - 打开相对于已执行模块的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4863374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com