2012-06-23 84 views
1

我在哪里可以存储文件夹的路径,可以从C程序中的每个函数/变量访问?例如,我有一个名为do_input.exe的可执行文件,路径为c:\tests\myprog\bin\do_input.exe, 另一个在C:\tools\degreesToDms.exe等等,我应该如何以及在哪里存储这些文件?存储文件夹的路径

我将它们作为字符串存储在头文件中,我将其包含在每个项目的文件中,但有人不鼓励这样做。他们是对的吗?

+0

那个人不鼓励你这样做的理由是什么?这些路径是否会动态变化,还是会始终保持不变? –

+0

如果这些路径保持不变,则可以在头文件中定义它们。但是,如果它们频繁更改,最好使用包含所需文件路径的固定配置文件。 – Zeta

+0

@Michael Dautermann:他们总是保持不变。但是,如果它们有所不同,你认为它会有所不同吗? –

回答

1

我将它们作为字符串存储在我包含在每个项目文件中的头文件中,但有人不鼓励这样做。他们是对的吗?

是的,他们是绝对正确的:在一个文件系统路径为编译代码安装特定的字符串“烘烤”是不是一个很好的决定,因为你必须重新编译仅仅是改变的一些关键文件的位置。这限制了团队其他成员运行测试的灵活性,并可能阻止您的测试在自动化测试环境中自动运行。

更好的解决方案是将纯文本配置文件与密钥目录的位置以及读取该文件并在运行时生成正确位置的函数结合使用。

或者,您可以提供密钥目录的位置作为程序的命令行参数。这样,运行程序的用户就可以在不重新编译的情况下设置正确的位置。

+0

如果我拥有所有的路径进入我的项目路径? –

+1

@ A_nto2团队规模越大,依靠固定地点的愿望就越不理想。为方便起见,您可以设计一个引用目录相对于exe文件位置的方案,然后您的程序将能够找到与您的项目路径相关的所有文件。但是当程序在自动化测试环境中运行时,显式覆盖可能仍然是可取的。 – dasblinkenlight

+0

我的意思是,如果我把所有的可执行文件和文件放到一个大文件夹中。他们都留在这个文件夹。所以在这种情况下,我可以使用.h? –

1

如果它们保持不变,那么在引用路径的所有各种.c文件中包含的“.h”头文件中,我看不到任何定义这些路径的问题。但是每台计算机上运行的这个东西可能有不同的路径(“Tests”而不是“test”),所以这是超级风险的编程,如果你在单台机器或一组机器上运行它,你直接控制。

如果路径将变化,则需要创建用于这些路径的存储场所(例如静态字符数组,等),然后有方法来允许这些加以取出,并可能动态复位(例如,而不是将输出文件写入“results”,可能用户想要更改内容以将文件写入“/tmp”)。完全取决于你在你的代码中做什么,以及你正在写的工具将会做什么。

+0

我不能在.h文件中修改它们,对吧? –

+0

您可以在“'.h'”文件中修改它们,但是它们会被编译并烘焙到可执行文件中。如果在安装工具的其他机器上有任何路径/目录不同,则可能会遇到问题。 –