在跨平台的基础上,如何在c++运行时指定工作目录
how to designate the working directory at run time in C++ in basis of cross platform?
我很困惑如何指定"的工作目录。/"在运行时。所以有时是项目文件的目录,有时是可执行文件的目录。这一切都取决于你如何执行程序。
我应该如何指定这个工作目录?/"就像我希望的那样?"我的意思是,我想让它始终是可执行文件的目录。这个实现应该是平台独立的。(我认为这将是相当大的困难,所以你可以忽略这个,如果不可能的话)。
如果你有一个编译器支持文件系统技术规范或C++17
编译器,你可以使用新的即将成为标准文件系统库
然而,我不知道有一种万能的方法来发现可执行目录。我认为应该在Windows
和Linux
上工作的一种方法是使用包含启动命令的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"总是存在的,你可以使用这些文件的内容作为你当前工作目录的指示符。
相关文章:
- 给定的两个代码有什么区别.一个在 ideone 上运行时超出时间限制,另一个工作正常
- 如何使功能"run"工作。程序在调用运行时退出
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- C++放置位置删除如何在内部(C++运行时)工作?如何克服其局限性?
- 运行时停止工作
- 从 WebAPI 项目运行静态类时出现 StackOverflow 异常 - 从控制台应用程序运行时工作正常
- 为什么三元运算符在编译时的工作方式与运行时不同?
- 从 eclipse IDE 运行工作正常,但在从终端运行时终止
- 运行时的功能超载如何工作,以及为什么过载
- 插入[n X n]矩阵类型的数据,并在运行时对其进行访问.将std::映射工作
- cvLoadimage 在运行时停止工作
- 减法和晶圆厂工作,然后在程序运行时不工作
- 我的程序在运行时不会打印任何内容,输入几个随机数后它会工作(有很多错误)
- QProcess:运行时重置工作目录
- 使用sublime-build时不能运行c++程序,从终端运行时工作正常
- 接受迭代器对的函数在并行运行时不工作
- 在跨平台的基础上,如何在c++运行时指定工作目录
- 运行时检查失败#0 - ESP值没有正确保存在…检查简单工作线程的点
- Tensorflow会话.Run在Android设备上运行时给出空输出张量,但在Ubuntu上运行时工作良好
- 在VS2010中没有调试运行时,发布版本无法工作