2010-02-18 71 views
3

我正在使用QSettings试图找出INI是否有效(使用status()来检查)我制作了一个有目的的无效INI文件并加载它。第一次调用代码时,它返回无效,但每次都返回有效。这是我的代码中的错误?设置不同的结果

+2

你能粘贴你的代码和文件吗? – 2010-02-18 20:31:17

+0

是...这是方法: http://pastebin.ca/1802323 和文件是: http://pastebin.ca/1802322 – eyecreate 2010-02-19 03:39:40

回答

0

检查你的代码,你需要在返回之前删除文件对象。

除此之外,您的代码使用QSettings::QSettings(fileName, format) c'tor打开ini文件。该呼叫以功能QConfFile::fromName结束(在qsettings.cpp中执行)。当我读到它时(有几个宏以及我决定不遵循),如果文件已经打开(即上次没有删除该对象),则文件不会重新打开。因此,状态将在第二时间确定。

1

这是一个Qt bug由一些全局状态引起的。请注意,不管您是否在您的QSettings对象上调用delete,都应该发生结果差异。下面简要总结了第一次运行会发生什么情况:

  1. 结果代码设置为NoError
  2. 全局缓存进行检查,看看你的文件存在
  3. 您的文件不存在,第一次,所以它的上线qsettings.cpp 1530(QT-4.6.2)
  4. 解析导致错误解析并设置结果代码(请参见qsettings.cpp第1552行)。
  5. 返回错误结果代码。

而第二次运行是不同的:

  1. 结果代码被设置为NoError
  2. 检查全局缓存,您的文件存在。
  3. 检查文件大小和时间戳以查看文件是否已更改(请参见qsettings.cpp第1424行)。
  4. 返回结果代码,这恰好是NoError - 文件被认为已被正确解析。