我有一个这样的项目结构-
|Project
|--data
| |--assets
| |--file1.txt
| |--file2.txt
|--Module
| |--src
| |--dumpFileToAssets.cpp
|--build
| |--out.exe
二进制文件被写入
build/out.exe
。因此,根据我的理解,相对路径是生成的二进制文件的路径。
代码片段来自
dumpFileToAssets.cpp
完整路径有效 -
std::string path = "/Users/Username/Project/data/assets/file1.txt"
ofstream myfile;
myfile.open (path);
myfile << "Writing this to a file.\n";
myfile.close();
构建目录的相对路径不起作用 -
含义
file1.txt
不是在 .open()
调用中生成的,因此未写入 -
std::string path = "./../data/assets/file1.txt"
ofstream myfile;
myfile.open (path);
myfile << "Writing this to a file.\n";
myfile.close();
问题 - 我的理解
any relative path inside the code is wrt to the binary path where the binary is generated
正确吗?
或者我可以访问代码内的
Project
根路径来实现此目的吗??
您对工作目录的理解不正确。有多种方法可以运行您的应用程序,并且每次的工作目录都不同
cd /Users/Username/Project/
./build/out.exe
工作目录为/Users/用户名/Project/
cd build
./out.exe
工作目录是/Users/用户名/Project/build
mkdir sub
cd sub
../out.exe
工作目录是/Users/用户名/Project/build/sub
在 Windows 上,工作目录甚至可能是不同的驱动器:
D:
cd \test
C:\Users\Username\Project\build\out.exe
工作目录为D:est
如果您想打开与可执行文件相关的文件,那么首先确定可执行文件的路径,这并不简单。请注意,
argv[0]
可能是符号链接,而不是可执行文件本身(就像less
是指向more
的链接)。