所以在 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/