QT文件io

 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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt 中,你可以使用 IO 多路复用技术来处理多个 IO 事件,以提高应用程序的性能和效率。Qt 提供了一个名为 QSocketNotifier 的类,它可以用于将底层操作系统的文件描述符(如套接字)与 Qt 的事件循环系统连接起来。 使用 IO 多路复用的一种常见方式是使用 Qt 的 QEventLoop 类。你可以在事件循环中监听多个套接字的读写状态,并在事件发生时触发相应的槽函数进行处理。 以下是一个示例代码: ```cpp #include <QtNetwork/QTcpServer> #include <QtNetwork/QTcpSocket> #include <QtCore/QObject> #include <QtCore/QCoreApplication> class MyServer : public QObject { Q_OBJECT public: explicit MyServer(QObject *parent = nullptr) : QObject(parent) { server = new QTcpServer(this); connect(server, &QTcpServer::newConnection, this, &MyServer::handleNewConnection); server->listen(QHostAddress::Any, 1234); } private slots: void handleNewConnection() { QTcpSocket *clientSocket = server->nextPendingConnection(); connect(clientSocket, &QTcpSocket::readyRead, this, &MyServer::handleReadyRead); } void handleReadyRead() { QTcpSocket *clientSocket = qobject_cast<QTcpSocket*>(sender()); if (clientSocket) { QByteArray data = clientSocket->readAll(); // 处理读取到的数据 qDebug() << "Received data: " << data; } } private: QTcpServer *server; }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MyServer server; return a.exec(); } ``` 在上面的示例中,我们创建了一个简单的 TCP 服务器,监听端口 1234。每当有新的连接到达时,我们将为新的客户端套接字连接 readyRead 信号的处理函数。在处理函数中,我们读取客户端发送的数据并进行处理。 这样,我们就实现了通过 IO 多路复用来同时监听多个套接字的读写事件的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值