配置文件在项目 C++ 中的位置
Location of config files in project c++
我想知道在 C++ 中是否有存储配置文件的约定。目前我将配置文件存储在与使用它们的源代码相同的目录中。在构建时,我确保通过 CMakeLists 将它们复制到正确的位置,这样我就可以以相对的方式访问它们(例如 "config.cfg" iso "/foo/bar/config.cfg)为了方便。
配置文件的做法是不可移植的,并且依赖于操作系统。您还必须问问自己,您的配置是按 installation/system 还是按用户定义的。
一般来说,将配置存储在与可执行文件相同的目录中是一个非常糟糕的主意,至少在开发完成后是这样。一般来说,可执行文件可以在多个用户之间共享,因此出于安全原因,应该位于对除系统管理员以外的所有人都写保护的目录中。
对于unix/linux,你可以考虑:
/etc
或其子文件夹,如果您的配置是针对已安装的系统,
~/
如果它是用户定义的配置。通常的做法是文件名以点开头。这个 article 会告诉你更多。
对于windows系统,您应该考虑:
- 现在通常的做法,转到registry。当然,这使用 windows api 并且完全不可移植。
C:\ProgramData
或 C:\Users\All users\AppData\Local
的子文件夹,如果您的配置是针对已安装的系统,
C:\Users\%USERNAME%\AppData\Local
的子文件夹,供用户自己配置。
SO questions 展示了如何找到正确的文件夹。
我想知道在 C++ 中是否有存储配置文件的约定。目前我将配置文件存储在与使用它们的源代码相同的目录中。在构建时,我确保通过 CMakeLists 将它们复制到正确的位置,这样我就可以以相对的方式访问它们(例如 "config.cfg" iso "/foo/bar/config.cfg)为了方便。
配置文件的做法是不可移植的,并且依赖于操作系统。您还必须问问自己,您的配置是按 installation/system 还是按用户定义的。
一般来说,将配置存储在与可执行文件相同的目录中是一个非常糟糕的主意,至少在开发完成后是这样。一般来说,可执行文件可以在多个用户之间共享,因此出于安全原因,应该位于对除系统管理员以外的所有人都写保护的目录中。
对于unix/linux,你可以考虑:
/etc
或其子文件夹,如果您的配置是针对已安装的系统,~/
如果它是用户定义的配置。通常的做法是文件名以点开头。这个 article 会告诉你更多。
对于windows系统,您应该考虑:
- 现在通常的做法,转到registry。当然,这使用 windows api 并且完全不可移植。
C:\ProgramData
或C:\Users\All users\AppData\Local
的子文件夹,如果您的配置是针对已安装的系统,C:\Users\%USERNAME%\AppData\Local
的子文件夹,供用户自己配置。 SO questions 展示了如何找到正确的文件夹。