Qt中创建、写入、删除(INI、XML文件)

64 篇文章 10 订阅
36 篇文章 13 订阅

#include "widget.h"

#include <QApplication>
#include <QSettings>
#include <QDebug>


// 写ini配置文件
void setIni()
{
    QSettings * myini = new QSettings("config.ini", QSettings::IniFormat);
    myini->setValue("person/name", "张三");
    myini->setValue("person/age", "12");
    myini->setValue("cat/name", "小小");
    delete myini;
}

// 读ini配置文件
void getIni()
{
    QSettings * myini = new QSettings("config.ini", QSettings::IniFormat);
    QString personName = myini->value("person/name").toString();
    QString catName = myini->value("cat/name").toString();
    delete myini;

    qDebug() << "人的姓名: " << personName ;
    qDebug() << "猫的姓名: " << catName ;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    // 写配置文件
    setIni();
    // 读配置文件
    getIni();

    return a.exec();
}

/********************************
Qt读写ini文件

一、示例Ini文件内容
下方为本文所使用的ini文件的内容

[group1]
key1=val1
key2=val2
sameKay=sameVal

[group2]
jian1=zhi1
jian2=zhi2
sameKay=sameZhi

二、Ini文件的写入
ini文件不需要像xml和json一样需要使用QFile打开文件,只需将文件路径及文件格式传入即可(下方代码运行完毕,ini文件则会更新,若文件不存在,会自动创建)

//创建QSettings对象并指定ini文件路径并将格式设置为ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
//创建第一个分组(创建分组的第一种方法)
setting.beginGroup("group1");
//添加第一个分组中的键值对
setting.setValue("key1", "val1");
setting.setValue("key2", "val2");
setting.setValue("sameKay", "sameVal");
//设置当前分组结束
setting.endGroup();
//添加第二个分组以及其键值对(创建分组的第二种方法)
setting.setValue("group2/jian1", "zhi1");
setting.setValue("group2/jian2", "zhi2");
setting.setValue("group2/sameKay", "sameZhi");

三、Ini文件的读取
3.1 第一种读取方式
好处:步骤不那么繁琐,代码简洁
坏处:不能指定读取某一组的内容,必须读取ini文件所有内容

//创建QSettings对象并指定ini文件路径并将格式设置为ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
//读取ini文件内容的第一种方法
qDebug() << "第一种读取方法";
foreach (QString key, setting.allKeys())
{
    //将当前的键值对打印输出
    qDebug() << key << setting.value(key).toString();
}

3.2 第二种读取方式
好处:能指定读取某一组的内容
坏处:步骤相较第一种方式更加繁琐

//创建QSettings对象并指定ini文件路径并将格式设置为ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
qDebug() << "第二种读取方法";
//获取ini文件中所有的组
QStringList groupList = setting.childGroups();
//指定读取某组的数据
setting.beginGroup(groupList[1]);
//遍历该组的键
foreach (QString key, setting.childKeys())
{
    //将当前的键值对打印输出
    qDebug() << key << setting.value(key).toString();
}
 

/************************************

1、创建文件夹
头文件:

#include <QDir>
#include <QMessageBox>

核心代码如下:

    //实例QDir
    QDir *folder = new QDir;
    //判断创建文件夹是否存在
    bool exist = folder->exists("D:/NewFolder");
    if(exist)
    {
        QMessageBox::warning(this,tr("创建文件夹"),tr("文件夹已经存在!"));
    } 
    else //如果不存在,创建文件夹
    {
        //创建文件夹
        bool ok = folder->mkdir("D:/NewFolder");
        //判断是否成功
           if(ok)
           {
               QMessageBox::warning(this,tr("创建文件夹"),tr("文件夹创建成功!"));
           } 
           else
           {
               QMessageBox::warning(this,tr("创建文件夹"),tr("文件夹创建失败!"));
           }
       }

2、写入文件:
头文件:

#include <QMessageBox>
#include <QFile>

核心代码如下:

    //实例QFile
    QFile file("D:/Qt.txt");  
    //定义文件内容字符串
    QString content= "写入文件的内容";
    //判断文件是否存在
    if(file.exists())
    {
        QMessageBox::warning(this,"创建文件","文件已经存在!");
    }else
    {
        //存在打开,不存在创建
        file.open(QIODevice::ReadWrite | QIODevice::Text);
        //写入内容,这里需要转码,否则报错。
        QByteArray str = content.toUtf8();
        //写入QByteArray格式字符串
        file.write(str);
        //提示成功
        QMessageBox::warning(this,"创建文件","文件创建成功!");
    }
    //关闭文件
    file.close();

3、修改文件内容:
头文件:

#include <QFileDialog>
#include <QMessageBox>
#include <QTextStream>
#include <QTextCodec> 
#include <QFile>

核心代码如下:

    //浏览文件
    //定义变量str接收QFileDialog对话框获取的文件路径 
    QString str = QFileDialog::getOpenFileName(this,"open file","/","text file(*.txt);;C file(*.cpp);;All file(*.*)"); 
    //文件路径转换为utf8格式
       QString str_utf8 =str.toUtf8();
       //判断是否选择文件
       if(str_utf8.isEmpty())
       {
           return;
       }  
       //设置文件路径
       QFile file(str_utf8);
       //判断文件是否打开成功
       if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
       {
           QMessageBox::warning(this,"打开文件","打开文件失败!");
           return;
       } 
       //文件流
       QTextStream ts(&file); 
       //获取文件中的数据
       QString str_get;
       //循环文档数据至结尾
       while(!ts.atEnd())
       {
           //将全部数据绑定str_get
            str_get = ts.readAll();
       }
       //关闭文档
       file.close();

    //保存文件,此段函数置于另一个槽函数
        QFile file(str_utf8);
        file.open(QIODevice::ReadWrite | QIODevice::Text);
        //写入内容,这里需要转码,否则报错。
        QByteArray strb = str_get.toUtf8();
        //写入QByteArray格式字符串
        file.write(strb);
        //提示成功
        QMessageBox::warning(this,"修改文件","文件修改成功!");
        file.close();

4、删除文件:
头文件:

#include <QMessageBox>
#include <QFile>
#include <QFileDialog>

核心代码如下:

    QString str = QFileDialog::getOpenFileName(this,"选择文件","/","text 
file(*.txt);;C file(*.cpp);;All file(*.*)");
    //转换文件路径
    QString get = str.toUtf8();
    //删除文件
    QFile::remove(get);  
    //提示
    QMessageBox::warning(this,"删除文件","删除成功!");

5、修改文件名
头文件:

#include <QFileDialog>
#include <QMessageBox>

核心代码如下:

    //新文件名 
    QString new = "Qt文件操作详解";
  //定义变量str接收QFileDialog对话框获取的文件路径
    QString str = QFileDialog::getOpenFileName(this,"open file","/","text 
file(*.txt);;C file(*.cpp);;All file(*.*)");
    //转换文件路径
    QString get = str.toUtf8(); 

    //实例QFileInfo函数
    QFileInfo file(get);
    //获取文件路径
    QString path = file.absolutePath();
    //bool型变量接收是否修改成功成功true,不成功false。
    bool x = QFile::rename(get,path + "/" + new);
    if(x)
    {
        QMessageBox::warning(this,"修改文件名","文件修改成功!");
    }else
    {
        QMessageBox::warning(this,"修改文件名","文件修改失败!");

6、INI文件写入操作:
对于INI文件,搜狗百科的解释:

.ini文件是InitializationFile的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置,一般用户就用windows提供的各项图形化管理界面就可实现相同的配置了。除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要求。一般不用直接编辑这些.ini文件,应用程序的图形界面即可操作以实现相同的功能。它可以用来存放软件信息,注册表信息等。

简言之,INI文件普遍作为配置文件使用。
头文件:

#include <QSettings>
1
核心代码如下:

QSettings *writeIni;
//QSettings 构造函数的第一个参数是 ini 文件的路径,第二个参数表示针对 ini 文件
writeIni = new QSettings("D:/CSDN.ini", QSettings::IniFormat);
//写入键、值
writeIni->setValue("node"+"/"+"ip","192.168.1.1");
//写入完成删除指针
delete writeIni;

7、INI文件读取操作
头文件:

#include <QSettings>

核心代码如下:

QSettings *readIni; 
QTextEdit *valEdit = new QTextEdit(this);
//QSettings 构造函数的第一个参数是 ini 文件的路径,第二个参数表示针对 ini 文件
readIni = new QSettings("D:/CSDN.ini", QSettings::IniFormat);
/*将读取到的 ini 文件保存在 QString 中,先取值,然后通过 toString()函数转换成QString类型*/ 
QString key = "键值";
QString ipResult = readIni->value("node"+"/"+key).toString();
//将结果绑定 IP 值控件上
valEdit->setText(ipResult);
//写入完成删除指针
delete readIni;

8 创建 XML 文件
头文件:

#include <QFile>
#include <QXmlStreamWriter>

核心代码如下:

//文件路径
QString xmlPath = "D:/Qter.xml";
QFile file(xmlPath);
if(file.open(QIODevice::WriteOnly | QIODevice::Text))
{
//实例 QXmlStreamWriter
QXmlStreamWriter stream(&file);
stream.setAutoFormatting(true);
//文档头
stream.writeStartDocument();
//根节点
stream.writeStartElement("Root");
//元素、值
stream.writeAttribute("href", "http://www.csdn.com/");
//节点内容
stream.writeTextElement("title", "Qt Home");
stream.writeEndElement();
stream.writeEndDocument();
//关闭文件
file.close();

9、 读取 XML 文件
头文件:

#include <QFile>
#include <QXmlStreamWriter>

核心代码如下:

QLabel *resultL = new QLabel(this);
QString xmlPath = "D:/Qter.xml";
QFile file(xmlPath);
//定义变量接收信息
QString str;
//判断文件是否存在
if(file.exists())
{
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
//实例 QXmlStreamReader 对象读取文件
QXmlStreamReader xmlRead(&file);
//循环节点
while (!xmlRead.atEnd())
{
//指针下移
xmlRead.readNext();
if(xmlRead.isStartElement())
{
//如果节点有等于 title 的
if(xmlRead.name() == "title")
{
//取 title 值赋予变量 str
str = xmlRead.readElementText();
}else
{
str = "没找到节点";
}
}
}
//将值绑定 QLabel 控件显示
resultL->setText(str);
}else
{
resultL->setText("文件打开失败");
}
//关闭文件
file.close();
}else
{
resultL->setText("文件不存在");
}
 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值