我正在创建一个(qt)跨平台应用程序,用于存储缓存和设置文件。经过大量的搜索,我仍然没有找到存储它们的方式和位置。 请注意,我只想使用QT的东西,否则我会重新发明轮子或节省疯狂的时间;我希望绝对控制应用程序的行为,而qt有时是随机或低效的。
对于linux,默认是/ etc //,但是那里没有写访问权限,我的应用程序将更改写入其配置文件。对于缓存,这将是/ var //,但默认情况下也没有写访问权限。设置和缓存最好应该是用户独立的,因为它是服务器软件。
我想过几个解决方案,但它们似乎并不优雅:
任何想法?什么是最佳做法?这些东西在windows和mac上的位置在哪里?
一些澄清: 它是一个应该独立于单个用户运行的服务器应用程序,因此不希望在/ home中存储任何内容。它也没有使用QT的任何gui功能,服务器将由设置文件或通过IP与服务器通信的单独GUI管理。
答案 0 :(得分:2)
如果您确实想要使用这些文件夹,则应使用root权限部分或完全执行应用程序。
你可以做的另一件事是:
myDir
,并且所有内容都存储在此工作目录中(如果您想要一个示例,则与qtcreator相同)。 /opt
is a good candidate。 myDir
中,为用户组设置了所需的访问\ modify \ execute文件的权限。myDir
本身需要root才能删除,而不是内部文件。如果没有安装程序,您将成为安装程序:继续执行脚本和命令,最终编写安装文档(我们现在在创业公司中这样做,这很痛苦,我们在更改为完全安装程序模式的过程)
注意:不是专家,但使用两种类型的机器作为服务器似乎你们真的在寻找麻烦。或者您的应用可能针对所有类型的服务器?
答案 1 :(得分:0)
用户应用程序不会在/ etc或/ var中存储用户可写数据,例如配置文件或缓存,它们通常使用并且应该使用$ HOME / .appname,或者现在经常使用$ HOME / .config / appname(config)和$ HOME / .local /(用于数据)。如果您使用QSettings并设置应用程序名称等,Qt应该在这里为配置数据做好工作。/ etc用于守护进程,系统配置等,而不是用户应用程序。 / usr / share等中可能只有readonly默认配置,但用户从不可写。 当系统中的多个用户同时运行应用程序时,共享用户可写数据也会给您带来很多同步/锁定问题。
在OS X上的Windows上,用户可写配置/数据也会转到用户目录中的文件夹,即Mac上的$ HOME / Library / Application \ Support,以及注册表加上C:\ users \ $ Username Windows上的应用程序数据(确切的路径取决于Windows版本。环境变量%APPDATA%指向该位置))。
要偏离这些标准,对于用户/ UI应用程序(与系统范围的守护程序/服务相反,使用/ etc,/ var是常见做法),您应该非常强有力的理由因为它们会与系统上的预期相矛盾,特别是在Linux和OS XEg上,你需要OS X上的安装程序,这对于那里的用户应用程序来说非常罕见。用户,尤其是管理员会讨厌你。
答案 2 :(得分:0)
我认为没有一个现成的Qt类来执行它,它遵循与每个平台相同的行为。
但我认为你可以尝试在不同平台上为自己的应用程序统一它,例如,在$ HOME / .yourapp目录中或者像它一样。这样,QDesktopServices :: storageLocation()可以帮到你。
http://doc.qt.digia.com/4.7/qdesktopservices.html#storageLocation
希望它有所帮助。
答案 3 :(得分:0)
为什么不将它与可执行文件存储在同一个文件夹中:
QString fileName;
fileName = qApp->applicationDirPath();
fileName += "...what you want...";
QFile* file = new QFile(fileName);