c++ - 在运行时找出文件的路径

标签 c++ cmake

在一个程序中,我在运行时打开一个文件,比如 file.dat。问题是当我运行可执行文件时,它希望文件位于执行它的目录中。我希望程序查看可执行文件所在的同一目录。我应该在我的程序(或构建系统)中进行哪些修改。

例如考虑这个程序:

int main()
{
std::ifstream ip("file.dat");
// do something.


return 0;
}

我正在使用 g++-4.6 编译器和 CMake 构建系统开发 Ubuntu。由于该项目支持源外构建,这意味着程序可执行文件可以位于任何位置,具体取决于调用 cmake 的目录。

感谢您的帮助...

最佳答案

在许多系统上,argv[0] 参数将包含用于执行程序的路径。这是否是程序的完整路径取决于它是如何被调用的。

int main (int argc, char *argv[]) {
    std::string progname(argv[0]);
    std::string datafile;
    if (progname.find_last_of('/') != std::string::npos)
        datafile = progname.substr(0, progname.find_last_of('/')+1);
    datafile += "file.dat";
    std::ifstream ip(datafile.c_str());
    //...
}

关于c++ - 在运行时找出文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249974/

相关文章:

c++ - 创建具有特定精度的新 cpp_dec_float 类型

c++ - 获取 Windows 句柄的 WNDPROC

linux - 无法更新 CMake

c++ - I/O 操纵器错误或 const ref 的临时生命周期延长?

c++ - 在编译期间初始化 static const std::map?

c++ - 析构问题

c++ - 未实现 : unexpected ast of kind ltgt_expr in C++

c++ - Boost 库在 WSL 上的位置

c++ - 为什么我无法包含 cmake 导出/导入库中的头文件

cmake - 使用 CMake 查找 BLAS 包含目录