我正在修改用C编写的大型代码库。此代码旨在被编译并从任意工作目录运行。这样一来,就可以从工作目录读取配置文件并将其输出到工作目录,从而可以更轻松地组织代码的设置和输出。
我对这段代码所做的补充需要从一些数据文件中读取数据。我想将它们放置在与读取它们的.c
文件相同的目录中,目录结构如下:
big_project/
|-- models/
| |-- my_file.c
| |-- my_data.txt
尝试使用相对路径打开此数据文件时出现我的问题。通常,相对路径是相对于工作目录的,在我的情况下,这是不起作用的,因为工作目录可以是任意的。如何从my_file.c
内部打开my_data.txt
以便使用相对路径进行阅读?
答案 0 :(得分:1)
根据我们在评论中的对话,您有几种选择,我将从下面列出,恕我直言,最不希望出现的情况。
您从未指定是在Windows,GNU + Linux中还是在进行跨平台开发,但我确定您可以根据您的平台调整建议。
您可以修改程序以查看程序数据和/或配置文件的平台标准位置。例如,您可以让它在GNU + Linux的/etc/<your-program>/default.conf
或Windows的%APPDATA%\<your-program>\default.conf
处寻找标准配置。
如果不同的用户需要使用自己的个人配置,则也可以使程序接受配置文件路径作为参数。例如:
GNU + Linux:
$ ./your-program --config ${HOME}/.your-program/my.conf
Windows:
> your-program.exe --config %userprofile%\your-program\my.conf
请注意,%userprofile%
的使用可能会根据Windows版本和/或所使用的shell(例如标准cmd.exe与powershell)而有所不同。
根据您的评论, 短期解决方法 可以是将__FILE__
宏的绝对路径编译为其中的绝对路径在运行时。正如我在评论中所说:
如果完全确定 ,请确保将程序 始终 放在同一目录中 针对所有人 ,如果您在编译时发送完整路径,则可以设置
__FILE__
宏显示的绝对路径;例如gcc $(pwd)/your-file.c
,在打印时__FILE__
将显示其在 编译时 (而不是运行时)的完整路径。 (不过,在此处不能添加足够的免责声明)
请注意, 不 使用此方法的原因很多。我只是建议将其作为一种短期的解决方法,以消除可能存在的现有危机级别的情况,同时(希望)仔细研究更理想的方法来处理配置和查找路径。>