0

我有一个类方法(在 UNIX 环境中的共享对象中实现),它需要在运行时访问文本数据文件(使用 ifstream)。目前,该方法假定数据文件可以在没有任何相对路径的情况下打开,即类似

ifstream dataFile("data.txt");

共享对象是从 python 代码加载的,为了使其可用于加载,它被复制到\usr\lib\文件夹中,作为 makefile 的构建后步骤。我的问题是如何使文本数据文件可用于共享对象。我考虑了以下几种可能性:

  • 使用一些相对路径,但该方法并非完全万无一失(该项目托管在各种实例上,我不能确定目录树是否会保持不变(例如)一个月后)。
  • 将数据文件也复制到\usr\lib,但我觉得这是一种错误的态度。

欢迎任何建议。

4

2 回答 2

2

解决此问题的正确方法是使文本文件的位置成为安装项目时将设置的可配置值。在 /etc/ 中使用配置文件是存储该值的常用方法。

这样,您可以将文本文件与所有与机器无关的文件(该数据文件机器无关,对吗?)放在例如 /usr/share/ 中,并且您的代码将“知道”在哪里找到它。

请注意,如果数据文件将作为代码操作的一部分进行修改,那么根据文件系统层次标准 (FHS) 和大多数其他 Unix 文件系统标准。

如果数据文件可以被视为配置文件,正如您在其中一条评论中提到的,您可以将其路径硬编码到 /etc/ 下的某个位置(例如 /etc/MyProject/data.cfg)并继续。

于 2010-12-05T11:01:49.150 回答
0

我可以想到两种解决方案:

  • 当你加载你的共享对象时,你以某种方式给它你的文件的路径。
  • 除了将文件复制到 /usr/lib 之外,您还可以在 /usr/lib 中创建一个符号链接,但这不是最好的做法。

第一个解决方案对我来说是最好的。

于 2010-12-05T10:56:24.470 回答