19基本文件操作

Posted gd-luojialin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"

以上是关于19基本文件操作的主要内容,如果未能解决你的问题,请参考以下文章

python之路19文件操作

Day19-文件的操作

python学习--day17-19 文件操作 r w a

文件和目录操作命令(19 个)--15.chattr

操作系统从生磁盘到文件---19

Day19 - 文件操作