Boost.Filesystem 如何找出可执行文件在哪个目录?
所以我运行我的应用程序。我需要它知道它的可执行文件在哪里。如何使用 Boost.Filesystem 找到它的路径?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
所以我运行我的应用程序。我需要它知道它的可执行文件在哪里。如何使用 Boost.Filesystem 找到它的路径?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
例如,
请注意,这将为您提供完整路径包括可执行文件名。
e.g.
Note that this gives you the full path including the executable file name.
你不能,Boost.Filesystem 不提供这样的功能。
但从 Boost 1.61 开始,您可以使用 Boost.Dll 和函数
boost::dll::program_location
:You cannot, Boost.Filesystem does not provide such functionality.
But starting with Boost 1.61 you can use Boost.Dll and function
boost::dll::program_location
:您无法使用 boost::filesystem 可靠地完成此操作。
但是,如果您使用的是 Windows,则可以调用
GetModuleFileName
来获取可执行文件的完整路径,然后使用boost::filesystem
获取目录。 (请参阅parent_path )You can't do it reliably with boost::filesystem.
However if you're on windows you can call
GetModuleFileName
to get the complete path of the executable and then useboost::filesystem
to get the directory. ( see parent_path)正如此处更全面地讨论的,最可靠的方法这不是通过 boost::filesystem 实现的。相反,您的实现应该考虑运行应用程序的操作系统。
但是,为了快速实现而不考虑可移植性,您可以检查 argv[0] 是否返回可执行文件的完整路径。如果是肯定的,您可以执行以下操作:
As discussed more comprehensively here, the most reliable way to do that is not through boost::filesystem. Instead, your implementation should take into the consideration the operating system on which the application is running.
However, for a quick implementation without portability concerns, you can check if your argv[0] returns the complete path to executable. If positive, you can do something like:
从 C++ 14 开始,您不需要 Boost,您可以使用标准库的文件系统,您可以轻松做到这一点:
(我可以确认这也适用于 Windows 和 Linux)
从文档复制的示例: https://en.cppreference.com/w/cpp/experimental/fs/absolute
From C++ 14 you don't need Boost, you can use the filesystem of the standard library you can do that easily:
(I can confirm this works on Windows and Linux as well)
Sample copied from the documentation: https://en.cppreference.com/w/cpp/experimental/fs/absolute
如果您的意思是从正在运行的可执行文件内部,则可以使用 boost::filesystem::current_path()
If you mean from inside the executable that you're running, you can use boost::filesystem::current_path()