关于Qt中如何文件处理txt、csv、ini文件

一、简单的文件夹操作

        //判断文件夹是否存在,不存在则创建
        QString curPath =Config::getInstance()->RecordPath;
        QDir dir(curPath);
        if(!dir.exists())
        {
            dir.mkpath(curPath);
        }

        //打开文件目录
        QString path= QFileDialog::getOpenFileName(this, tr("选择文件目录"),         
        Config::getInstance()->RecordPath, "*.csv");
        if(!path.isEmpty())
        {
            //……
        }

        //选择一个存在的目录
        QString FileName = QFileDialog::getExistingDirectory(this,tr("选择目录"),"");
        if(!FileName.isEmpty())
        {
            //……
        }
//读取文件夹下所有文件
QStringList Config::ReadSystemModel()
{
    QStringList list;
    QDir dir(QDir::currentPath()+"/Netlist/");

    if (!dir.exists()) {
        return list;
    }

    //取到文件名,但是去掉.和..的文件夹(这是QT默认有的)
    dir.setFilter(QDir::Files|QDir::NoDotAndDotDot);

    QStringList infolist = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
    for (int i=0;i<infolist.count();i++)
    {
        QString name=infolist.at(i);
        if(name.contains(".net"))
            list.append(name.remove(".net"));
    }
    return list;
}

二、最简单的读写操作QFile 

        //读操作
        QFile file(path); //参数就是读取文件的路径
        file.open(QIODevice::ReadOnly);//只读模式

        //第一种方式
        //QByteArray array = file.readAll();//全部读出 ,返回值为 QByteArray

        //第二种方式
        QByteArray array;
        while( !file.atEnd())//判断是否读到文件尾
        {
            array += file.readLine(); //按行读,追加
        }

        //将读取到的数据 放入textEdit中,显示出来
        ui->textEdit->setText(array);//类型隐式转换
        //ui->textEdit->setText( codec->toUnicode(array)  );//格式转码
        file.close();
        //写操作
        QFile file(path);
        //进行写文件
        file.open(QIODevice::Append); //用追加方式进行写
        file.write("我是新写入的数据!!!");
        file.close();

 二、使用QFile和QTextStream配合

    QFile file(name);
    if (file.open(QIODevice::ReadOnly|QIODevice::Text))
    {
        QTextStream out(&file);
        Config::getInstance()->TimeList.clear();
        while (!out.atEnd())
        {
            //读取csv文件的一行
            QString strline = out.readLine();
            if (strline.isEmpty())
            {
                continue;
            }
            Config::getInstance()->TimeList.append(strline.toDouble());
        }
        file.close();
    }
    //读取数据类型文件
    QString LibName=QDir::currentPath()+"/Netlist/"+s_sencerParam.Name+".net";
    QDataStream Stream;
    QFile FileSave;
    FileSave.setFileName(LibName);

    Stream.setDevice(&FileSave);
    Stream.setVersion(QDataStream::Qt_5_13);

    s_sencerParam.listData.clear();
    if(FileSave.open(QIODevice::ReadOnly))
    {
        Stream>>....;    //对应存入的数据类型
        FileSave.close();
    }

四、使用QSettings操作ini或注册表

//修改字段
void Config::ModifyParam(QString Primary, QString secondary, QVariant data)
{
    QSettings *mSettings;
    if(ProPath==""||ProName=="")
        mSettings=new QSettings(QDir::currentPath()+"/system/Settings.ini",
QSettings::IniFormat);
    else
        mSettings=new QSettings(ProPath+"/"+ProName,QSettings::IniFormat);

    mSettings->setIniCodec(QTextCodec::codecForName("UTF-8"));
    mSettings->setValue(QString("%1/%2").arg(Primary).arg(secondary),data);
    delete mSettings;
}

//读取字段
QVariant Config::ReadParam(QString Primary, QString secondary)
{
    QSettings *mSettings;
    if(ProPath==""||ProName=="")
        mSettings=new QSettings(QDir::currentPath()+"/system/Settings.ini",
QSettings::IniFormat);
    else
        mSettings=new QSettings(ProPath+"/"+ProName,QSettings::IniFormat);

    mSettings->setIniCodec(QTextCodec::codecForName("UTF-8"));
    QVariant data;
    data=mSettings->value(QString("%1/%2").arg(Primary).arg(secondary));
    delete mSettings;
    return data;
}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫听穿林打叶声儿

感觉有用的,一毛两毛不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值