c++ - 绝对路径...困惑(ubuntu)

标签 c++ linux ubuntu path codeblocks

所以在 Ubuntu 中的 Code::Blocks 中(最新)。

我有一个项目,我在其中加载一个文件并从中读取一个数字。

#include <fstream>
using namespace std;
int main(){
    ifstream in("data/file.t");
    int n;in>>n;
}

现在有 cout<<n它显示-1203926 (和其他随机数)虽然文件中的数字是 0 .

data是二进制文件所在的位置(我的意思是数据和二进制文件位于同一文件夹(程序)中),我期望路径是相对的,就像在 Windows 中一样......但前提是我输入完整路径 /home/csiz/Desktop/C++/ep0/Program/data/file.t它会给我一个 0 .

你能告诉我如何使其成为相对路径吗?我更喜欢一些东西,以便在 Windows 中代码可以在不进行任何更改的情况下编译。

最佳答案

该路径是相对于当前工作目录的,而不是相对于您的应用程序所在的目录。

一个简单的解决方案是使用 SH 脚本将工作目录更改为应用程序的目录,然后执行您的应用程序,如下所示:

$!/bin/sh

cd `dirname $0` # changes the working dir to the script's dir

./application-name # executes your application

# no need changing back to your previous working directory
# the chdir persists only until the end of the script

应用程序具有初始化脚本的情况并不罕见。

您也可以在主 C/C++ 应用程序中执行此操作。由于可执行文件的路径是在 main 方法的 argv[0] 中传递的,因此您可以执行相同的操作。

但我建议不要这样做,因为当您在 Linux 上重新分发应用程序时,数据文件通常放置在与可执行文件(通常为/usr/bin)不同的目录中(通常为/var/lib)。

所以它要么是一个初始化脚本,要么在环境变量中传递数据目录的路径,像这样执行......

MY_APP_DATA_PATH=/var/lib/my-app /path/to/executable

关于c++ - 绝对路径...困惑(ubuntu),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/964396/

相关文章:

c++ - reinterpret_cast<unsigned long> 无效转换

c - Ubuntu::./program: 权限被拒绝

unix - Cron 作业未启动

c - 库中的链接器脚本变量阻止动态链接

c++ - 有没有可以为 ubuntu 编译代码的在线、基于 html/flash/js 的免费 C++ 编辑器?

python - Tensorflow(仅 CPU)安装错误 | Ubuntu 14.10 | NumPy 1.8.2

c++ - 为什么我不能访问作为参数传递给函数的基类的 protected 成员变量?

c++ - std::vector 初始化的模板参数

c++ - _mm512_i64gather_pd() 内存访问错误

linux - 脚本手动工作但不通过 crontab