• Qt 读写文件操作


    在项目开发过程中,有一个需求,程序启动时会定义一组全局变量,当用户操作这些变量,做一些修改,需要记住用户的操作,下次打开软件,按照用户上次设置的值进行计算显示。

    配置文件格式如下,非常简单

     

     在此解决思路是,先读取配置文件,循环每读一行,解析变量和它对应的值,全部存起来,然后用当前需要记录的值,去集合中找,如果找到了,就更新值,如果没找到就增加到集合中,最后全部再写入文件。

    #include <QtCore/QCoreApplication>
    #include <QFile>
    #include <QTextStream>
    #include <QDebug>
    
    
    void DumpCfg(const std::string& strName,const std::string& strValue)
    {
        QFile rfile("C:\Users\Administrator\Desktop\123.cfg");
    
        if (!rfile.open(QIODevice::ReadOnly | QIODevice::Text))
        {
            qDebug() << "Can't open the file!" << endl;
        }
    
        std::map<std::string, std::string> mvars;
    
        while (!rfile.atEnd())
        {
            QByteArray line = rfile.readLine();//读一行
            QString strLine(line);
    
            if (strLine[0] == ';' || strLine.indexOf("--") !=-1)
            {
                continue;
            }
            
            int pos = strLine.indexOf("=");
    
            QString strVar = strLine.left(pos);
            QString strValue = strLine.right(strLine.length() - pos - 1);
            strValue = strValue.simplified();//返回一个字符串,该字符串已从开始和结束处删除空白,并将内部包括ASCII字符’	’,’
    ’,’v’,’f’,’
    ’和’ '.替换为‘ ’,如果替换后有两个空格的话,只保留一个空格。
        
            std::string sVar = strVar.toLocal8Bit();
            std::string sValue = strValue.toLocal8Bit();
    
            mvars[sVar] = sValue;
        }
        rfile.close();
    
        std::map<std::string, std::string>::iterator iter = mvars.find(strName);
    
        if (iter != mvars.end())
        {
            iter->second = strValue;
        }
        else
        {
            mvars[strName] = strValue;
        }
    
        //写文件
        QFile wfile("C:\Users\Administrator\Desktop\123.cfg");
    
        if (!wfile.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            qDebug() << "Can't open the file!" << endl;
        }
        QTextStream out(&wfile);
    
        for (std::map<std::string, std::string>::iterator iter = mvars.begin(); iter != mvars.end();++iter)
        {
            out << QString("%1=%2").arg(iter->first.c_str()).arg(iter->second.c_str()) << "
    ";
        }
    
        wfile.close();
    }
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
    
        DumpCfg("abc", "10");//记录修改过得变量
    
        return a.exec();
    }
  • 相关阅读:
    avalon ms-repeat avalon1
    抓取各个浏览器引擎关键字,,百度学术关键字
    JS中Float类型加减乘除 修复
    js jquery 权限单选 bug修改以及正确代码 购物车数量加减
    图片加载错误默认显示图片
    文本框中焦点竖杆长度控制
    Go语言中 Print,Println 和 Printf 的区别(八)
    typescript中新增的基本数据类型
    尝试自己搭一个简单的typescript运行环境
    Go语言流程控制中的break,continue和goto(七)
  • 原文地址:https://www.cnblogs.com/chechen/p/15092316.html
Copyright © 2020-2023  润新知