在你的代码中,问题出现在关闭文件的位置。当前的关闭文件操作位于循环内部,导致每次循环执行后都会关闭文件。因此,在第二次循环时就会报错 “QIODevice::read (QFile, “config.cfg”): device not open”,因为文件已经在第一次循环中被关闭了。
为了解决这个问题,你应该将configFile.close()
移动到while
循环外部,并确保在读取完配置文件后才关闭它。修改后的代码如下:
QFile configFile("config.cfg");
if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << u8"无法打开配置文件!";
return;
}
QTextStream in(&configFile);
while (!in.atEnd()) {
QString line = in.readLine();
// 假设配置文件每行都是key=value形式
int delimiterPos = line.indexOf('=');
if (delimiterPos != -1) {
QString key = line.left(delimiterPos).trimmed();
QString value = line.mid(delimiterPos + 1).trimmed();
// 这里可以根据需要处理读取到的参数值,比如存入变量、传递给函数等等
//qDebug() << "Key: " << key << ", Value: " << value;
// 根据需要处理读取到的参数值
if(key == "isOpenDiskMonitor")
{
bool Value;
if(value == "0")
{
Value = false;
}
else
{
Value = true;
}
CDiskCapacityManage::instance()->isOpenDiskMonitor = Value; // 将port赋值给相应变量
qDebug() << CDiskCapacityManage::instance()->isOpenDiskMonitor;
}
if(key == "capacity")
{
CDiskCapacityManage::instance()->capacity = value;
qDebug() << CDiskCapacityManage::instance()->capacity;
}
if(key == "strDisk")
{
CDiskCapacityManage::instance()->strDisk = value;
qDebug() << CDiskCapacityManage::instance()->strDisk;
}
if(key == "strDisk")
{
CDiskCapacityManage::instance()->pathDisk = value;
qDebug() << CDiskCapacityManage::instance()->pathDisk;
}
}
}
configFile.close(); // 关闭文件
通过将configFile.close()
放在while
循环之后,你可以确保在读取完整个配置文件后才关闭它,避免了重复关闭文件导致的错误。
内容由零声教学AI助手提供,问题来源于学员提问