我正在尝试写入不在可执行文件所在目录中的文件;无论可执行文件在哪里,我也希望它能够工作(我相信这会排除使用“..”)。我需要这个在Linux上工作。感谢信。
答案 0 :(得分:2)
此问题已经提出,请参阅Get path of executable或Finding current executable's path without /proc/self/exe以获得一个好的答案,或自行搜索。
您的问题归结为获取正在运行的可执行文件的绝对路径。
答案 1 :(得分:0)
您可以轻松地执行此操作,但是您必须拥有要处理的文件的绝对路径,或者您必须在可执行文件和要访问的文件之间创建一些相对文件结构。
另一种选择是,您可以使用分叉进程或popen()
启动find
,并为其提供适当的参数以找到您要处理的文档,然后使用返回的字符串作为创建fstream
对象以写入或附加到该文件的参数。
例如,这看起来像是:
#include <limits.h>
#include <fstream>
#include <stdio.h>
char buffer[PATH_MAX];
//search the entire file-system starting from the root for "my_specific_file.txt"
FILE* located_file_handle = popen("find / -name my_specific_file.txt -print", "r");
//get the first file returned from the find operation and close the pipe
fgets(buffer, PATH_MAX, located_file_handle);
pclose(located_file_handle);
fstream file(buffer);
如果您认为通过find
调用会返回多个文件,那么您应该使用fgets
循环访问每个文件,直到找到所需的文件为止。
答案 2 :(得分:0)
如果您事先知道,可以使用绝对路径:
fstream * fs = new fstream("~/config_file");
如果文件不同,您可以从用户输入或配置文件中获取路径。
根据文件的位置,移动位置和程序位置,您实际上可以使用相对路径。根据您提供的信息,我无法分辨。
答案 3 :(得分:0)
通常从运行目录开始解析相对路径,该目录不一定是可执行目录(而是发布可执行文件的shell中的当前目录)。
在linux下,您可以使用以下命令读取可执行文件的目录:
readlink /proc/self/exe
或者您可以使用提升fs::path
和fs::system_complete
。然后,您必须从该字符串中删除最后一个组件,即可执行文件名。
获得可执行文件目录的路径后,在其中添加“/ ..”,您将获得可执行文件目录上方的目录。