QT文件io

  • Post author:
  • Post category:其他

 1.涉及到的类
              QFile  –》表示某个文件
              QDir  –》表示某个目录
              QFileInfo –》表示文件的属性信息

   2.使用思路
             (1)定义QFile对象
                      QFile::QFile(const QString &name)
                                 参数:name –》文件路径名
             (2)打开文件
                     bool QFile::open(QIODevice::OpenMode mode)
                                返回值:成功true 失败false
                                   参数:mode –》 QIODevice::ReadOnly  只读
                                                              QIODevice::WriteOnly  只写
                                                              QIODevice::ReadWrite  可读写
                                                              QIODevice::Append      追加
                                                              QIODevice::Truncate     清空覆盖文件
             (3)读写文件
                       读文件:
                                   qint64 QIODevice::read(char *data, qint64 maxSize)
                                                  返回值:读取到的字节数
                                                     参数:data –》存放读取的数据
                                                               maxSize –》你打算读取多少字节的数据
                                   QByteArray QIODevice::read(qint64 maxSize)
                                                 返回值:返回你成功读取到的字符串
                                                    参数:maxSize –》你打算读取多少字节的数据
                                   QByteArray QIODevice::readAll()  //一口气把整个文件全部读完(适合读取小文件)
                                                 返回值:返回你成功读取到的字符串
                                   qint64 QIODevice::readLine(char *data, qint64 maxSize)  //一次最多只能读取一行数据,遇到回车结束读取 fgets()类似
                                                 返回值:读取到的字节数
                                                    参数:data –》存放读取的数据
                                                              maxSize –》你打算读取多少字节的数据
                     写文件:
                                  qint64 QIODevice::write(const char *data, qint64 maxSize)
                                  qint64 QIODevice::write(const char *data)
                                  qint64 QIODevice::write(const QByteArray &byteArray)
             (4)关闭文件
                    void QFileDevice::close()
             (5)判断是否读取到文件末尾(当你循环读取一个文件的时候)   
                    bool QFileDevice::atEnd() const
                                   返回值:读到末尾–》true
  
   3.整理总结QString和char *以及QByteArray之间的转换
                QString –》QByteArray   使用 toUtf8()
                QString –》char *            使用 QChar *QString::data()
                QByteArray –》QString   QString(QByteArray) 构造函数
                char *          –》QString   QString(char *) 构造函数
               
   4.目录操作QDir
           (1)创建QDir对象
                        QDir(const QString &path)  //path是目录路径名
           (2)遍历目录
                        QStringList QDir::entryList()
                                  返回值:字符串列表,用来存放多个文件的名字

   5.获取文件属性QFileInfo
           (1)创建QFileInfo对象
                       QFileInfo(const QString &file)  //通过file路径名去创建QFileInfo的对象(最好使用绝对路径)
           (2)获取文件各种属性
                       qint64 QFileInfo::size() const  //返回文件大小
                       bool QFileInfo::isDir() const   //判断是否是目录
                                    返回值: 返回true表示是目录
                       bool QFileInfo::isFile() const  //判断是否是普通文件
 

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QFile>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开文件对话框
void MainWindow::on_openbt_clicked()
{
    //弹出文件对话框
    filepath=QFileDialog::getOpenFileName(this,"我的文件对话框");

    //创建QFile对象
    QFile myfile(filepath);

    //打开文件
    myfile.open(QIODevice::ReadWrite);

    //读取文件内容
    QByteArray buf=myfile.readAll();

    //把读取内容在文本浏览框和编辑框中显示出来
    //  setText(QString &text)   QString &text=buf;
    ui->textEdit->setText(buf);
    ui->textBrowser->setText(buf);

    //关闭文件
    myfile.close();
}
//保存修改后的文件
void MainWindow::on_savebt_clicked()
{
    //清空覆盖原文件
    QFile myfile(filepath);
    myfile.open(QIODevice::ReadWrite|QIODevice::Truncate);

    //获取文本编辑框中修改后的完整内容
    QString str=ui->textEdit->toPlainText();

    //把获取的完整内容写入到原文件中
    myfile.write(str.toUtf8());

    //关闭文件
    myfile.close();
}

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QDebug>
#include <QFileInfo>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //创建QDir的对象
    QDir mydir("C:/Users/PC/Desktop/share");

    //遍历目录
    QStringList mylist=mydir.entryList();

    //判断目录中子目录和普通文件
    for(int i=0; i<mylist.size(); i++)
    {
        //拼接得到每个文件/目录的绝对路径
        QString allpath=QString("C:/Users/PC/Desktop/share/%1").arg(mylist.at(i));
        QFileInfo myinfo(allpath);

        //判断是否是目录
        if(myinfo.isDir())  //是目录
            qDebug()<<allpath;
        if(myinfo.isFile()) //是普通文件
            qDebug()<<allpath<<" 大小是: "<<myinfo.size();
    }

}

MainWindow::~MainWindow()
{
    delete ui;
}


版权声明:本文为hqb_newfarmer原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。