C++ 如何使用fstream写入可执行文件';C++;?

C++ 如何使用fstream写入可执行文件';C++;?,c++,fstream,C++,Fstream,我试图写入的文件不在可执行文件所在的目录中;我还希望无论可执行文件在哪里,它都能工作(我相信这会排除使用“.”)。我需要这个在Linux上工作。谢谢。您可以轻松完成此操作,但您必须拥有要处理的文件的绝对路径,或者必须在可执行文件和要访问的文件之间创建一些相对的文件结构 另一个选项是,您可以使用forked进程或popen(),启动find,并为其提供适当的参数以定位您要处理的文档,然后使用返回的字符串作为参数来创建要写入或附加到该文件的fstream对象 例如,这可能看起来像: #include

我试图写入的文件不在可执行文件所在的目录中;我还希望无论可执行文件在哪里,它都能工作(我相信这会排除使用“.”)。我需要这个在Linux上工作。谢谢。

您可以轻松完成此操作,但您必须拥有要处理的文件的绝对路径,或者必须在可执行文件和要访问的文件之间创建一些相对的文件结构

另一个选项是,您可以使用forked进程或
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);
#包括
#包括
#包括
字符缓冲区[PATH_MAX];
//从根目录开始搜索整个文件系统,查找“my_specific_file.txt”
FILE*located_FILE_handle=popen(“find/-name my_specific_FILE.txt-print”、“r”);
//获取从查找操作返回的第一个文件并关闭管道
fgets(缓冲区、路径、文件句柄);
pclose(位于文件句柄);
流文件(缓冲区);

如果您认为调用
find
会返回多个文件,那么您应该使用
fgets
循环遍历每个文件,直到找到所需的文件。

如果您提前知道,您可以使用绝对路径:

fstream * fs = new fstream("~/config_file");
如果文件不同,可以从用户输入或配置文件获取路径


根据文件所在的位置、是否移动以及程序所在的位置,您可能实际上能够使用相对路径。根据您提供的信息,我无法判断。

通常从正在运行的目录开始解析相对路径,该目录不一定是可执行文件目录(而是启动可执行文件的shell中的当前目录)

在linux下,您可以使用以下命令读取可执行文件的目录:

readlink /proc/self/exe
或者您可以使用boost
fs::path
fs::system\u complete
。然后必须从该字符串中删除最后一个组件,即可执行文件名


找到可执行目录的路径后,在其上附加“/…”,您将获得可执行目录上方的目录。

这已被询问过,请查看或获得一个好的答案,或者自己搜索


您的问题归结为获取运行的可执行文件的绝对路径。

您需要提供一个路径。合适的路径取决于您的环境,与编程无关。您只需要知道要写入的文件在哪里。为了让您的生活更轻松,您可以将文件名保留为绝对路径。绝对路径始终以“/”开头,它是系统的根目录。