【问题标题】:how to designate the working directory at run time in C++ in basis of cross platform?如何在跨平台的基础上在C++中指定运行时的工作目录?
【发布时间】:2016-10-12 19:36:51
【问题描述】:

我很困惑如何在运行时指定“./”的工作目录。 所以有时是项目文件的目录,有时是可执行文件的目录。所有依赖者如何执行程序。

我应该如何指定这个工作目录“./”,因为我希望它总是如此?我的意思是我想将它始终保留在可执行文件的目录中。 而且这个实现应该是平台无关的。(我认为这会相当困难,所以如果不可能,你可以忽略它)。

【问题讨论】:

  • 问题是并非所有平台都有文件系统。他们不需要支持文件系统。许多嵌入式系统没有文件系统。此外,有些文件系统不使用“../”表示法,而是使用其他表示法将文件与文件夹分开。
  • 你打算对目录做什么?并非所有系统都允许在程序目录中存储数据文件。此外,要完全跨平台,您甚至不能假设操作系统具有目录。
  • @ThomasMatthews 啊,对不起,我不是说嵌入式系统。其实我只是想问一个linux和win32平台的实现。
  • @BoPersson 嗨,我想用代码创建代码,我需要指定工作目录“./”。或者至少我应该知道它在运行时在哪里。
  • 在互联网上搜索“c++ 跨平台框架”。通常框架支持文件和目录。另见“c++ boost文件系统”

标签: c++ directory


【解决方案1】:

如果您的编译器支持filesystem 技术规范或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,这是它的基础。

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

【讨论】:

  • O.o c++17? thnx,它看起来比我找到的解决方案干净得多。
【解决方案2】:

如果其他人有兴趣,我自己找到了解决方案。首先,您必须在计算机上安装 Qt。 您可以在运行时更改工作目录: QDir::setCurrent(qApp->applicationDirPath());

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

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

【讨论】:

    【解决方案3】:

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

    "./[your file].txt" 将始终存在,您可以使用这些文件的内容作为当前工作目录所在位置的指示符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多