在跨平台的基础上,如何在c++运行时指定工作目录

how to designate the working directory at run time in C++ in basis of cross platform?

本文关键字:工作 运行时 跨平台 基础上 c++      更新时间:2023-10-16

我很困惑如何指定"的工作目录。/"在运行时。所以有时是项目文件的目录,有时是可执行文件的目录。这一切都取决于你如何执行程序。

我应该如何指定这个工作目录?/"就像我希望的那样?"我的意思是,我想让它始终是可执行文件的目录。这个实现应该是平台独立的。(我认为这将是相当大的困难,所以你可以忽略这个,如果不可能的话)。

如果你有一个编译器支持文件系统技术规范或C++17编译器,你可以使用新的即将成为标准文件系统库

然而,我不知道有一种万能的方法来发现可执行目录。我认为应该在WindowsLinux上工作的一种方法是使用包含启动命令的argv[0],并找到其规范路径:

    std::error_code ec;
    // find the executable directory
    auto exe_folder = fs::canonical(fs::path(argv[0]), ec).parent_path();
    // set the current directory to the executable directory
    fs::current_path(exe_folder);

目前GCC v6文件系统作为技术规范,否则你也可以使用它所基于的boost::filesystem

通常程序没有对包含可执行文件的目录的写权限。

我自己找到了一个解决方案,如果有人感兴趣的话。首先你必须在电脑上安装Qt。您可以在运行时使用以下命令更改工作目录:QDir: setCurrent (qApp -> applicationDirPath ());

这将在运行时将工作目录改为可执行文件的目录。

但是它看起来不是很整洁,因为你必须有Qt。

我想到的最好的解决方案(不需要c++ 17编译器)是,如果你能保证一个数据驱动的文件将驻留在你的可执行文件旁边,你可以在你的项目目录中放置一个类似的命名文件。

"。/[your file].txt"总是存在的,你可以使用这些文件的内容作为你当前工作目录的指示符。