在 C 中的离线软件中查找文件位置
Finding file locations in offline softwares in C
在我的 C 程序中的某个时刻,我必须处理这样的事情。
FILE * fptr = fopen("/Parent/child/.../file.dat");
这意味着为了访问任何文件我需要知道它的位置。这都是可以理解的。
但是,我怎样才能使它通用呢?在我的计算机中,“/Parent/child/.../file.dat”可以工作,因为这是存储文件的地方,但我正在制作一个分发给其他用户的软件,所以路径明显不同。我的问题是,如何将特定文件安装到用户的计算机中,这样我才能知道并获取该文件的位置。我对这个概念感到困惑,因此非常感谢任何可以帮助我更好地理解它的资源。
在 Linux 中,应用程序文件的默认路径应该是 硬编码的 。应用程序应遵循 standard。例如,与体系结构无关的文件应转到 /usr/share/
,然后是您的应用程序名称,或者如果您希望数据在应用程序之间共享,则应转到通用类别,例如 images
。用户特定的配置文件应该去 $HOME/.config/<app-name>
。较旧的应用程序将其默认配置放在 $HOME/.<app-name>
中。
您还应该提供使用命令行开关覆盖数据默认路径的能力 and/or 环境变量 and/or 用户配置文件(后者的位置也应该是可使用命令行开关覆盖 and/or 环境变量)。
一些应用程序搜索相对于可执行位置的数据目录。可执行文件可以通过读取 /proc/self/exe
符号 link 来知道自己的绝对路径。例如,如果一个可执行文件在 /usr/local/bin/somename
中找到自己,它可以查找 /usr/local/share/<app-name>
(从可执行文件名称向上两个级别,向下到 share/<app-name>
)。
最后,如果您分发源代码供用户构建,文件位置应该是配置参数。
在我的 C 程序中的某个时刻,我必须处理这样的事情。
FILE * fptr = fopen("/Parent/child/.../file.dat");
这意味着为了访问任何文件我需要知道它的位置。这都是可以理解的。 但是,我怎样才能使它通用呢?在我的计算机中,“/Parent/child/.../file.dat”可以工作,因为这是存储文件的地方,但我正在制作一个分发给其他用户的软件,所以路径明显不同。我的问题是,如何将特定文件安装到用户的计算机中,这样我才能知道并获取该文件的位置。我对这个概念感到困惑,因此非常感谢任何可以帮助我更好地理解它的资源。
在 Linux 中,应用程序文件的默认路径应该是 硬编码的 。应用程序应遵循 standard。例如,与体系结构无关的文件应转到 /usr/share/
,然后是您的应用程序名称,或者如果您希望数据在应用程序之间共享,则应转到通用类别,例如 images
。用户特定的配置文件应该去 $HOME/.config/<app-name>
。较旧的应用程序将其默认配置放在 $HOME/.<app-name>
中。
您还应该提供使用命令行开关覆盖数据默认路径的能力 and/or 环境变量 and/or 用户配置文件(后者的位置也应该是可使用命令行开关覆盖 and/or 环境变量)。
一些应用程序搜索相对于可执行位置的数据目录。可执行文件可以通过读取 /proc/self/exe
符号 link 来知道自己的绝对路径。例如,如果一个可执行文件在 /usr/local/bin/somename
中找到自己,它可以查找 /usr/local/share/<app-name>
(从可执行文件名称向上两个级别,向下到 share/<app-name>
)。
最后,如果您分发源代码供用户构建,文件位置应该是配置参数。