1

我有一个项目,我想读取一个包含特定文件夹中数据的文件。我有一个脚本文件来执行程序,这个脚本文件可以位于计算机上的任何位置,因此我不能在程序中使用函数 getcwd 来获取我的数据文件的路径。我的问题是,C 中是否有可能从目标文件所在的位置获取路径。即不是从哪里运行脚本?

示例:启动脚本目录:/home/user/my_files/scripts/start_script.sh 主程序目录:/home/user/project/

4

3 回答 3

1

在脚本中,您可以执行cd <specific dir>然后使用绝对路径启动二进制文件。

cd <specific dir>
/home/user/project/main

那么在main你很好可以做一个getcwd()已经<specific dir>返回main


不,没有便携式方法可以mainmain.

于 2013-02-25T15:52:47.317 回答
1

@Matthias 给出了一个问题的链接,其中很好地讨论了查找可执行位置的各种方法。

我可以再加一个。

安装程序时,您可以将路径直接嵌入到可执行文件中。

例如,在程序中,您可以定义一个数组,如下所示:

char ExecutablePath[16 + 1024] = "&Unique#!%Stuff~";

其中前 16 个字符形成一个唯一序列,不会出现在程序的其他任何地方,最后 1024 个字符包含路径,最初是未知的。

在安装过程中,您在可执行文件中查找此唯一字符序列,一旦找到,您就将路径写入文件中。

如果操作系统对其进行验证,您可能需要调整文件的校验和(Windows 似乎并不关心)。

于 2013-02-25T19:21:10.757 回答
0

如果我错了,请纠正我,看起来你可以使用argv[0].

int main(int argc, char** argv)
{
     printf("Name of executable: %s\n", argv[0]);

     /* extract everything before first '/' from argv[0] */
     char buffer[SomeLargeNumber];

     char* ptr = argv[0] + strlen(argv[0]) - 1;

     while(*ptr != '/' && ptr != argv[0]) { ptr--; }

     int len = ptr - argv[0];

     memcpy(buffer, argv[0], len);
     buffer[len] = '/';
     buffer[len + 1] = 0;

     return printf("Directory: %s\n", buffer);
}
于 2013-02-25T11:20:49.143 回答