10 Qt文件系统

版权声明:原创不易,如引用,请附原文链接 https://blog.csdn.net/Chiang2018/article/details/89288644

Qt 作为一个通用开发库,提供了跨平台的文件操作能力。Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力。下面是 I/O 设备的类图(Qt5):

QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;

QFileDevice:Qt5新增加的类,提供了有关文件操作的通用实现。

QFlie:访问本地文件或者嵌入资源;

QTemporaryFile:创建和访问本地文件系统的临时文件;

QBuffer:读写QbyteArray, 内存文件;

QProcess:运行外部程序,处理进程间通讯;

QAbstractSocket:所有套接字类的父类;

QTcpSocket:TCP协议网络数据传输;

QUdpSocket:传输 UDP 报文;

QSslSocket:使用 SSL/TLS 传输数据;

1、文件的基本操作

QFile提供了从文件中读取和写入数据的能力。我们通常会将文件路径作为参数传给QFile的构造函数。不过也可以在创建好对象最后,使用setFileName()来修改我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()以及write()这样的函数,返回值为QByteArray。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,默认为UTF-8编码方式,而不是自己分析文件路径字符串。示例如下:

    //使file与in.txt相关联
    QFile file("in.txt");
    //以只读文本的方式打开该文件
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug() << "Open file failed.";
        return -1;
    }
    else
    {
         while (!file.atEnd())
         {
            //每次读取一行
             qDebug() << file.readLine();
        }
    }
   file.close();

/*
  枚举值	                        描述
QIODevice::NotOpen		未打开
QIODevice::ReadOnly		以只读方式打开
QIODevice::WriteOnly		以只写方式打开
QIODevice::ReadWrite		以读写方式打开
QIODevice::Append		以追加的方式打开,新增加的内容将被追加到文件末尾
QIODevice::Truncate		以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。
  QIODevice::Text		在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如 Win32 平台上是 \r\n
QIODevice::Unbuffered	        忽略缓存

*/

2、二进制读写

QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。可以直接读写没有编码的二进制数据,例如图像、视频、音频等。示例如下:

QFile file("file.dat");
file.open(QIODevice::ReadWrite);
//关联文件
QDataStream stream(&file);
QString str = "the answer is 42";
//借助QDataStream 将内容以二进制的形式输入文件
stream << str;

file.close();

3、文本方式读写

QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream同QDataStream的使用基本一致。当使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而以文本形式写入数据,是没有数据之间的分隔的。所以使用QTextStream写入二进制数据后,再重新读出是会出错的。所以一般读出使用

  1. QString QTextStream::readLine() 读取一行
  2. QString  QTextStream::readAll()读取所有文本

默认情况下,QTextStream的编码格式是 Unicode,如果我们需要使用另外的编码,可以使用:stream.setCodec("UTF-8");

 

猜你喜欢

转载自blog.csdn.net/Chiang2018/article/details/89288644