Qt深入浅出(十)文件读写

  • Post author:
  • Post category:其他



文件读写


​ Qt中使用QFile类来操作文件的输入/输出。继承至QIODevice,QIODevice类是输入/输出设备的基类,


为设备提供了公共实现和抽象接口用于读写块数据。QIODevice又继承至QObject。


1 使用QFile打开文件



  • QFile的构造函数


  
  
  1. QFile(const QString &name) //传入一个文件路径



  • 构造完成后,并没有打开文件,需要使用QFile::open函数来打开文件


  
  
  1. [virtual] bool QFile::open(OpenMode mode);
  2. /*
  3. *OpenMode mode 打开方式,是一个枚举类型
  4. *QIODevice::NotOpen 不打开
  5. *QIODevice::ReadOnly 只读方式
  6. *QIODevice::WriteOnly 读写方式
  7. *QIODevice::ReadWrite 读写方式
  8. *QIODevice::Append   追加方式
  9. *QIODevice::Truncate 阶段方式
  10. *QIODevice::Text     转换不同平台的换行,读的时候把所有换行转成'\n',写的时候再把'\n'转换对应平台的换行
  11. *QIODevice::Unbuffered 不使用缓冲区
  12. */



例如:


  
  
  1. QFile file("d:/123.txt");
  2. file.open(QIODevice::ReadOnly);




2 关闭文件


  
  
  1. [virtual] void QFileDevice::close(); //刷新缓冲区,并关闭文件


3 文件读操作


  • QIODevice::read函数


  
  
  1. QByteArray QIODevice::read(qint64 maxSize);//读取maxSize个字节,内部位置指针后移maxSize,并返回一个QByteArray对象。


例如:


  
  
  1. QFile file("d:/123.txt");
  2. file.open(QIODevice::ReadOnly);
  3. qDebug() << file.read(10) << endl;
  4. file.close();

  • QIODevice::readLine函数


  
  
  1. QByteArray QIODevice::readLine(qint64 maxSize = 0) //读取一行,但是这一行不能超过maxSize字节,maxSize = 0代表不限制行字节数。


例如:


  
  
  1. QFile file("d:/123.txt");
  2. file.open(QIODevice::ReadOnly);
  3. qDebug() << file.readLine(10) << endl;
  4. file.close();

  • QIODevice::readAll函数


  
  
  1. QByteArray QIODevice::readAll()


4 文件写操作


  • QIODevice::write函数


  
  
  1. qint64 QIODevice::write(const QByteArray &byteArray); //将byteArray写入文件,写完内部位置指针后移


例如:


  
  
  1. QFile file("d:/123.txt");
  2. file.open(QIODevice::ReadWrite | QIODevice::Text); //打开模式可以使用‘|’组合
  3. QByteArray byte("hellworld");
  4. file.write(byte);
  5. file.write(byte);
  6. file.close();



5 使用QDataStream


​ 流控文件输入输出可以使用QDataStream。


  • 流控写入


  
  
  1. #include <QDataStream>
  2. #include <QDebug>
  3. #include <QFile>
  4. int main(int argc, char**argv)
  5. {
  6.    QFile file("d:/123.txt");
  7.    file.open(QIODevice::ReadWrite);
  8.    QDataStream stream(&file);
  9.    int a = 10;
  10.    QString str = "helloworld";
  11.    stream << a << str;
  12.    file.close();
  13.    return 0;
  14. }

  • 流控读取


  
  
  1. #include <QDataStream>
  2. #include <QDebug>
  3. #include <QFile>
  4. int main(int argc, char**argv)
  5. {
  6.    QFile file("d:/123.txt");
  7.    file.open(QIODevice::ReadWrite);
  8.    QDataStream stream(&file);
  9.    int a;
  10.    QString str;
  11.    stream >> a >> str;
  12.    qDebug() << "a:" << a << "str:" << str << endl;
  13.    file.close();
  14.    return 0;
  15. }