zoukankan      html  css  js  c++  java
  • 19基本文件操作

    文件操作是应用程序必不可少的部分。Qt 作为一个通用开发库,提供了跨平台的文件操作能力。在所有的 I/O 设备中,文件 I/O 是最重要的部分之一。因为我们大多数的程序依旧需要首先访问本地文件(当然,在云计算大行其道的将来,这一观点可能改变)。QFile提供了从文件中读取和写入数据的能力。

    我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改。QFile需要使用 / 作为文件分隔符,不过,它会自动将其转换成操作系统所需要的形式。例如 C:/windows 这样的路径在 Windows 平台下同样是可以的。

    QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。

    思路:给定路径,打开文件,读取内容(写入内容)

    例子:在设计器中添加一个编辑框,两个按钮(读,写)。读,将文件中内容读取并显示在编辑框中。写,将编辑框中的内容写入一个新建的文件。对应按钮槽函数代码如下:

    头文件:

    #include <QFileDialog>

    #include <QFile>

    读文件操作

    void Widget::on_btnRead_clicked()

    {

        QString strReadPath=QFileDialog::getOpenFileName(this,"Read","../","*.txt");

        if(strReadPath.isEmpty()==false)

        {

            //QFile readFile(strReadPath);

            //创建文件对象

            QFile readFile;

            //关联文件名字

            readFile.setFileName(strReadPath);

            //打开文件,只读方式

            bool bIsOk=readFile.open(QIODevice::ReadOnly);

            if(bIsOk==true)

            {

                //一次性读取

               // QByteArray  arr=readFile.readAll();

                //按行读取

                QByteArray  arr;

                while(!readFile.atEnd())

                {

                    arr+=readFile.readLine();

                }

                //显示在编辑框

                ui->textEdit->setText(QString(arr));

            }

          //关闭文件

          readFile.close();

        }

    }

    写文件操作

    void Widget::on_btnWrite_clicked()

    {

         QString strWritePath=QFileDialog::getSaveFileName(this,"Write","../");

         if(strWritePath.isEmpty()==false)

         {

             QFile writeFile(strWritePath);

             //打开文件,只写方式

             bool bIsOK=writeFile.open(QIODevice::WriteOnly);

             if(bIsOK==true)

             {

                 //从编辑框获取

                 QString strBuf=ui->textEdit->toPlainText();

                 //写入文件

                 //QString->QByteArray

                 //writeFile.write(strBuf.toUtf8());

                 //QString->C++ string->char*

                 writeFile.write(strBuf.toStdString().data());

                 //本地平台编码

                 //writeFile.write(strBuf.toLocal8Bit());

             }

          writeFile.close();

         }

    }

    不同编码间的转换:

                 //QString->QByteArray

                 Qstring buf=”123”;

          QbyteArray a=buf.toUtf8();       

          a=buf.toLocal8Bit();            //本地平台编码,Windows默认是ANSI,                             QT默认uft-8

          //QbyteArrya->char*

          char *b=a.data();

         

          //char *->Qstring

          char *p=”abcd”;

          Qstring str=Qstring(p);

    获取文件基本信息

    头文件:

    #include <QFileInfo>

    #include <QDateTime>

    #include <QDebug>

            QFileInfo info(readFile);             //指定文件路径

            qDebug()<<"文件名:"<<info.fileName();

            qDebug()<<"文件大小:"<<info.size();

            qDebug()<<"文件格式:"<<info.suffix();

            qDebug()<<"文件创建时间:"<<info.created().toString("yyyy-MM-dd hh:mm:ss");  

          //如:2018-1-1  11:25:25

    可以使用QFileInfo获取有关该文件的信息。

    QFileInfo有很多类型的函数,我们只举出一些例子。比如:

       isDir()              检查该文件是否是目录;

       isExecutable()          检查该文件是否是可执行文件等。

       baseName()           可以直接获得文件名;

       completeBaseName()    获取完整的文件名

       suffix()             则直接获取文件后缀名。

       completeSuffix()      获取完整的文件后缀

    我们可以由下面的示例看到,baseName()和completeBaseName(),以及suffix()和completeSuffix()的区别:

    QFileInfo fi("/tmp/archive.tar.gz");

    QString base  = fi.baseName();  // base = "archive"

    QString base  = fi.completeBaseName();  // base = "archive.tar"

    QString ext   = fi.suffix();  // ext = "gz"

    QString ext   = fi.completeSuffix();  // ext = "tar.gz"

  • 相关阅读:
    Spring事务传播特性NOT_SUPPORTED使用演示
    spring配置基于xml的声明式事务
    反射的简单应用
    MyBatis批处理工具类MyBatisBatchHelper.java
    Mybatis分页插件PageHelper的使用
    利用Spring的Profile加载指定数据源
    Nginx状态信息(status)配置及信息详解
    nginx配置基于域名、端口、IP的虚拟主机
    Nginx Linux安装与部署
    rename 批量修改文件名简单用法
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9215764.html
Copyright © 2011-2022 走看看