C目标文件位置的fread路径目录

时间:2013-02-25 09:47:15

标签: c fread

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

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

3 个答案:

答案 0 :(得分:1)

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

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

然后在main中,您可以getcwd()<specific dir>返回main


不,没有便携式方法可以从main中获取main所在的路径。

答案 1 :(得分:1)

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

我可以再添加一个。

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

例如,在程序中,您可以定义类似这样的数组:

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

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

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

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

答案 2 :(得分: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);
}