zoukankan      html  css  js  c++  java
  • QT文件(夹)操作---QFile、QDir、QFileInfo、QTextStream和QDataStream异同

    1.1    文件和目录

    QFile、QBuffer和QTcpSocket可支持读写设备,用open函数打开,用write或putChar函数写入。用read和readLine或readAll进行读取数据,最后用 close函数进行关闭设备。

    1.1.1            QFile读写文件

    QFile构造函数输入参数文件路径和文件名称

    setFileName:设置文件路径函数来设置;

    exists:检查文件是否存在。

    remove:删除文件

    open:打开文件

    (1)QFile实例代码:

        QFile file("/home/administrator/testdir/test.txt");  //相对或者绝对路径

        if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { 

            qDebug()<<"Can't open the file!"<<endl; 

        while(!file.atEnd()) { 

            QByteArray line = file.readLine(); 

            QString str(line); 

            qDebug()<< str; 

    1.1.2            QTextStream和QDataStream异同

    QTextStream和QDataStream都是面向数据流的,都适用于QIODevice,TextStream能做的事情QDataStream都能做。QTextStream 侧重于文本读写。这里所说的文本指的是普通的简单的QChar,QString,QLatin1Char,int等等之内的。而QDataStream则像一个容器一样,可以存放结构体等复杂数据类型,将数据序列化后按照先进先出的原则进行存储,存入的顺序和读出的顺序一定要一致,否则无法得到正确的数据。不仅可以读写text,而且还好可以读写一个特定数据类型,比如QPoint, QFont,几乎Qt支持的所有类型都可以使用QDataSream进行操作。

    (1)QTextStream写入文本到文件

    //下面代码就是写文件操作
    QDir::setCurrent(QCoreApplication::applicationDirPath());//设置当前目录为程序运行目录

    QFile data("output.txt");
    if (data.open(QFile::WriteOnly | QFile::Truncate)) {
    QTextStream out(&data);

    out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;
    // writes "Result: 3.14 2.7 "
    }

    (2)QDataSream 写入结构体到文件

    就拿读写QPoint为例:

    QDir::setCurrent(QCoreApplication::applicationDirPath());//设置当前目录为程序运行目录

           QFile fileout("file.dat");

           fileout.open(QIODevice::WriteOnly);

           QDataStream out(&fileout);   // we will serialize the data into the file 

           out << QString("the answer is");   // serialize a string 

           out << (qint32)42;        // serialize an integer 

           QPoint pos(8, 6);//序列化一个点到文件

           out << pos;//序列化一个点到文件

           fileout.close();//一定要关闭,否则下面读不到数据

           QFile filein("file.dat");

           filein.open(QIODevice::ReadOnly);

           QDataStream in(&filein);    // read the data serialized from the file 

           QString str;

           qint32 a;

           QPoint tmp;

           in >> str >> a>>tmp; // extract "the answer is" and 42

    1.1.3            QIODevice类

    QIODevice直接继承自QObject,QIODevice类是输入/输出设备的基类。为设备提供了公共实现和抽象接口用于读写块数据。QIODevice是一个抽象类,不能被实例化Q3Socket, Q3SocketDevice,QAbstractSocket,QBuffer,QFile,QLocalSocket,QNetworkReply,QProcess继承。

    read,readLine,readAll读取文件中的数据;

    write写入数据;

    getChar,putChar,ungetChar函数实现单个字符的操作;

    size:获取文件大小;

    seek:定位到文件任意位置;

    pos:获取当前位置;

    atEnd判断是否到文件末尾;

    1.1.4            QFileInfo类

    构造函数传入QFile参数

    SetFile设置QFile参数

    Path:获取文件路径

    FileName:获取文件的名称

    baseName:获取文件基本名称

    suffix:获取文件名称后缀

    isFile,isDir,isSymLink 判断文件类型

    实例代码

    #include <QtCore/QCoreApplication> 

    #include <QFileInfo> 

    #include <QDebug> 

     

    int main(int argc, char *argv[]) 

        QCoreApplication a(argc, argv); 

        QFileInfo info1("E:/meego/vi_command.lnk"); 

        qDebug() << info1.isSymLink(); 

        qDebug() << info1.absoluteFilePath(); 

        qDebug() << info1.size(); 

        qDebug() << info1.symLinkTarget(); 

        qDebug() << "**********************"; 

        QFileInfo info2(info1.symLinkTarget()); 

        qDebug() << info2.isSymLink(); 

        qDebug() << info2.absoluteFilePath(); 

        qDebug() << info2.size(); 

        return a.exec(); 

                           

    1.2    QDir类

    QDir类提供了访问目录结构和他们的内容。

    QDir类提供了访问目录结构和它们的内容的与平台无关的方式。

    QDir用来操作路径名称、关于路径和文件的访问信息和操作底层文件系统。

    QDir使用相对或绝对文件路径来指向一个文件。绝对路径是从目录分隔符“/”或者带有一个驱动器标识(除了在Unix下)。如果你总是使用“/”作为目录分隔符,Qt将会把你的路径转化为符合底层的操作系统的。相对文件名是由一个目录名称或者文件名开始并且指定一个相对于当前路径的路径。

    例如绝对路径:

    QDir("/home/administrator/soft");

    QDir("D:/software");

    我们可以使用isRelative()或isAbsolute()函数确认QDir是用的相对路径还是绝对路径。使用makeAbsolute()来转换相对路径的QDir转换成绝对路径的QDir.

     

    int main(int argc, char *argv[])

    {

    QCoreApplication app(argc, argv);

    QDir dir;

    dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);

    dir.setSorting(QDir::Size | QDir::Reversed);

    QFileInfoList list = dir.entryInfoList();

    std::cout << " Bytes Filename" << std::endl;

    for (int i = 0; i < list.size(); ++i) {

    QFileInfo fileInfo = list.at(i);

    std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10)

    .arg(fileInfo.fileName()));

    std::cout << std::endl;

    }

    return 0;

    }

    自己编了一个股票监控软件,有如下功能,有兴趣的朋友可以下载;

    (1)   个股监测。监测个股实时变化,可以监测个股大单交易、急速拉升和下降、主力入场和出场、股票最高点和最低点提醒。检测到最高点、最低点、主力进场点、主力退场点、急速拉升点、急速下跌点,给出语音或者声音提醒,不用再时刻看着大盘了,给你更多自由的时间;

    (2)   大盘监测。监测大盘的走势,采用上证、深证、创业三大指数的综合指数作为大盘走势。并实时监测大盘的最高点和最低点、中间的转折点。

    (3)   股票推荐。还能根据历史数据长期或短期走势进行分析,对股市3千多个股票进行分析对比,选出涨势良好的股票,按照增长速度从大到小排序,推荐给你涨势良好的股票;

    下载地址:

    1.0.3版本(修复大盘指数崩溃缺陷)下载地址:

    链接:https://pan.baidu.com/s/1BJcTp-kdniM7VE9K5Kd3vg 提取码:003h

    更新链接:

    https://www.cnblogs.com/bclshuai/p/10621613.html

  • 相关阅读:
    原型模式&原型链
    [四种方法]检测数据类型
    JSON
    PHP基础 mysqli的事务处理
    PHP的扩展类 mysqli_stmt:预处理类
    PHP的 Mysqli扩展库的多语句执行
    PHP基础文件下载类的简单封装
    PHP基础封装简单的MysqliHelper类
    Spring深入浅出(四)AOP面向切面
    Spring深入浅出(二)IOC的单例 ,继承,依赖,JDBC,工厂模式以及自动装载
  • 原文地址:https://www.cnblogs.com/bclshuai/p/8745069.html
Copyright © 2011-2022 走看看