【问题标题】:QSettings IniFormat File gets empty after restart重启后 QSettings IniFormat 文件变空
【发布时间】:2013-03-03 20:29:52
【问题描述】:

我使用 QSettings 在 Linux 中保存和加载参数到/从 ini 文件中:

写:

QSettings settings("setup.ini", QSettings::IniFormat);
settings.beginGroup("Setup_Parameter");
settings.setValue("Parameter1",parameter1_value);
settings.sync();
settings.endGroup();

阅读:

QSettings settings("setup.ini", QSettings::IniFormat);
settings.beginGroup("Setup_Parameter");
parameter1_value = settings.value("Parameter1","0").toInt();
settings.endGroup();

setup.ini 工作正常,而系统处于开启状态。 如果我通过关闭电源并再次打开来重新启动系统,setup.ini 文件有时会完全为空。我会说 5 次尝试中的 3 次。

我已经尝试将文件保存在应用程序和根/设置路径中。 以及写入后复制文件,但断电后副本也是空的。

为什么 setup.ini 文件会丢失其内容?重启时需要保留参数。

【问题讨论】:

  • 您能明确提出一个问题吗?
  • 我需要 setup.ini 来保留其内容。为什么setup.ini有时会在关机再开机后为空?
  • 尝试重命名一个文件,也许是什么删除了它?没有其他解释这种情况发生了 5 次中的 3 次。而且不需要settings.sync(),尤其是在settings.endGroup()之前,根据QSettingsdocumentation,可能是这里出错了?
  • 我应该重命名什么? setup.ini?我做了同步(),因为我曾经在写入后立即进行备份。但就像我写的那样,这个备份文件(cp setup.ini setup.bak)也变空了。顺便说一句:文件没有被删除,它仍然存在,但为空。
  • 好的,首先,将 sync() 移到 endGroup() 之后。我认为它可以提供帮助。我提议重命名只是为了防止外界干扰。

标签: qt restart ini qsettings


【解决方案1】:

我们已经修复了在 QSettings 的 'sync' 功能之后调用 'sync' linux 命令的相同问题。

【讨论】:

  • 总是在 cmets 中提出您的想法或尝试。
  • 我们注意到 QSettings 的同步功能强制将键和值写入文件。 sync linux 命令实际上是将文件存储在文件系统上。
【解决方案2】:

我遇到了同样的问题。我的 QSettings 文件有时会在电源重置后消失。该文件仍然存在,但它的大小为零字节。 QT 应用程序在 ARM 处理器上的 Debian Squeeze 上运行。文件系统、操作系统和应用程序都位于 4G SD 卡上。

我已修改应用程序以在对设置文件进行任何更改后调用同步功能。但是我们昨晚进行了电源重置,其中一个单元(我们有大约 60 个正在运行)丢失了它的设置。我们正在运行 QTEmbedded-4.8.2,我不知道如何解决这个问题。

【讨论】:

  • 不,我们从未解决过它。我们通过编写一个脚本解决了这个问题: 1) 如果设置文件不存在,则在启动时制作一个备份副本。 2) 如果现有设置文件为 0 字节,则将备份设置文件复制回来。
【解决方案3】:

在写函数之后需要一个sync():

QSettings settings("setup.ini", QSettings::IniFormat);
settings.beginGroup("Setup_Parameter");
settings.setValue("Parameter1",parameter1_value);
settings.endGroup();
settings.sync();
sync();

【讨论】:

  • sync() 定义在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2013-12-12
  • 2023-03-10
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
相关资源
最近更新 更多