如何在包含的c ++源代码中编写外部文件的路径

时间:2011-02-23 18:25:57

标签: c++ path code-organization ifstream

假设我正在编写一个库或一组工具mytool,其中定义了其他人可以使用的类MyTool。假设我有一个这样的目录树:

project
| - program1
    | - main1.cpp
...
| - mytool
    | - mytool.h
    | - mytool.cpp
    | - data.txt
tool1.cpp中的

我使用外部二进制巨大文件data.dat

ifsteam f("data.txt");

main1.cpp使用mytool,但如果mytool.(s)omain1.o相关联,则程序找不到data.dat,对于这种情况,我需要将上一行更改为:

ifstream f("../mytool/data.txt");

但我无法知道其他人放置mytool的位置,例如他们可以有不同的目录树:

project
| - program1
    | - main1.cpp
    | - mytool
        | - tool1.h
        | - tool2.cpp
        | - data.dat

另外(我是对的?)路径取决于程序的执行位置。

我能想象的唯一解决方案是将MyTool的路径传递给类构造函数data.dat,但我想为用户隐藏此文件。

3 个答案:

答案 0 :(得分:1)

您需要知道文件的绝对路径,或者知道文件相对于工作目录的路径。一种方法是在编译程序之前使用用户运行的配置脚本。然后,该脚本将相关路径硬编码到您的程序中,因此程序将以为用户定制的方式硬连接路径。

有时候这不是一个选项,因为您不想分发源代码,或者因为您希望允许路径在运行时更改。然后,您可以在运行时读取配置文件,该文件说明文件的位置。但这只是一个抽象层:你仍然需要知道配置文件的位置。例如,您可以询问系统用户个人目录所在的位置,然后在该目录中找到该文件。这是路径的编译时和运行时计算之间的混合。

答案 1 :(得分:1)

一种选择是将环境变量用于工具的位置。例如,将其命名为MYTOOLDIR。您可以设置MyTool安装的路径。拨打getenv("MYTOOLDIR");可以解决路径问题。

在Windows上,在mytool目录中,运行SETX PATH=%PATH%;./,或在Linux上,只需PATH=$PATH:./。 (提供set_env.bat或诸如此类的东西。)

答案 2 :(得分:0)

您需要将二进制文件的位置设置为用户在程序的特定安装上定义的配置值。或者,更容易,只需将二进制文件放在与最终可执行文件相同的位置,并使用" data.dat"作为道路。