QT学习day06---文件管理(目录操作、文件操作)

版权声明:版权声明:本文章刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等均归"江南、董少"所有! https://blog.csdn.net/qq_41453285/article/details/83685868

文件管理分为:目录操作、文件操作

一、目录操作

主要用到两个类:QDirQFileInfo

QDir:具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件系统,而且还可以存取Qt 的资源文件。 

QDir对象不给出路径时,默认的是当前程序.exe路径

主要函数
exists(); //判断目录是否存在(如果路径中含有标点符号可能会不识别),
          //返回值:存在返回true,不存在返回false
count();  //返回路径下的文件数量(文件夹+文件),隐藏文件也会加进去
remove(); //删除文件
rmdir();  //删除文件夹
mkdir();  //创建一个文件夹
rename(); //重命名:文件、文件夹都可以
dirName();//返回当前文件夹的名称
cd();     //进入指定路径,不同盘下需要切换盘
cdUp();   //返回上一级
entryList(); //返回当前路径的所有条目,后面还可跟函数
entryInfoList(); //返回目录下所有条目组成的字符串链表,后面还可跟函数
entryInfoList().size();//返回目录下文件、文件夹数量

目录属性:isReadable();
         isAbsolute();
         isRelative();
         isRoot();

返回路径:absolutePath();//返回QDir给出的路径,返回值为QString
         currentPath(); //返回当前程序.exe的路径,返回值为QString
         current();     //返回当前路径以及各种信息
         homePath();    //返回用户路径
         tempPath();    //临时文件路径
         rootPath();    //返回根目录

QFileInfo:提供了与系统无关的文件信息,包括文件的名称、在文件系统中的位置(路径)、文件的 访问权限以及是否是一个目录或者符号链接等。

主要函数:
isDir();  //判断是否为文件夹
isFile(); //判断是否为文件
filePath();//返回文件路径
fileName();//返回文件名字
例:打印路径下的所有文件与文件夹

QDir dir("E:\QT");
foreach (QFileInfo mItem, dir.entryInfoList())//遍历路径下的每一项
{
    if(mItem.isDir())//如果是文件夹
    {
        qDebug() << " Dir " << mItem.filePath();  //打印路径
    }
    else//如果不是文件夹
    {
        qDebug() << "File" << mItem.filePath();
    }
}

过滤器的使用

概念:用于筛选出路径下的指定文件类型

事例:
Dir mDir(QDir::current());
QStringList filters;
filters<<"*.cpp"<<"*.h"<<"*.txt"<<".pro";  //设置指定的文件类型
mDir.setNameFilters(filters);  //设置过滤器
qDebug()<<mDir.entryList(filters, QDir::Files); //打印帅选出的条目

 

二、文件操作

主要用到的三个类:QFileQFileInfoQDir

QFile提供了 一个用于读/写文件的接口,它可以用来读/写文本文件、二进制文件和 Qt 资源的 I/0 设备。 

常用函数:
open();  //打开文件
close(); //关闭文件
read();  //读文件,参数为读取的长度大小(必填)
readLine();//读取一行
readAll(); //读取所有
write();  //向文件中写入数据
size();  //获取文件大小,以字节为单位返回
atEnd(); //判断是否到达文件尾
seek();  //将文件指针定位到指定位置处
pos();   //获取文件指针当前位置
errorString();  //获取错误信息 

文件的打开:

文件的打开使用open()函数,参数需要使用到不同的打开方式,需要使用到QIODevice

QIODevice:是Qt所有I/O设备的基础类,为QFIle等类提供一个抽象接

文件打开方式:不同方式之间可以配合使用,中间用 | 隔开

ReadOnly   //以只读的方式打开,文件不存在出错
WriteOnly  //以只写的方式打开,原内容清空,文件不存在则创建
ReadWrite  //以读写的方式打开文件
Append     //已追加的方式打开文件
Truncate   //以重写的方式打开文件
Text       //以文本的方式打开文件。在读取时,将行结束符转换成\n,在写入时,将行结束符转换成本地格式
//打开并读取文件
QFile file("a.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    qDebug() << file.errorString();
else
    qDebug() << "open sucess !";
while (!file.atEnd())//如果没到达文件尾,一直读取
{
    //QByteArray以字节的方式存储信息
    QByteArray line = file.readLine();
    qDebug() << "read some data:"<<line;
}
//打开并打印文件信息(路径和大小)
QFile file("image.jpg");
QFileInfo info(file);//获取文件的信息
qDebug() << QStringLiteral("路径") << info.absoluteFilePath()
         << QStringLiteral("大小") << info.size();
file.close();

三、文件流操作

out:对内存来说是输出,对文件来说是输入

in:对内存来说是输入,对文件来说是输出

//输入文本流
qSetFieldWidth(); //位宽
left  //左对齐
================================================
QFile file("output.txt");
if(file.open(QFile::WriteOnly | QFile::Truncate))
{
    QTextStream out(&file);  //创建写入流
    out << "PI:" << qSetFieldWidth(10) << left << 3.1415926;//写入数据
    out << "\r\ninsert new line";//写入数据
}
file.close();
//输出文件流

QFile fileOpen("output.txt");
if(! fileOpen.open(QFile::ReadOnly | QIODevice::Text))
    qDebug() << fileOpen.errorString();
QTextStream in(&fileOpen); //创建输出流
while(!in.atEnd())
{
    QString oneLine = in.readLine();  //读取一行
    qDebug() << oneLine;
}

二进制流:

二进制流在文件拼接、截取用的比较多

QDataStream:加头文件,#include <QDataStream>

//输入文件流
QFile file("file.dat");
file.open(QIODevice::WriteOnly);//后面不加,默认以二进制方式打开
QDataStream out(&file);
out << QString("the answer is"); //向文件中序列化字符串
out << (qint32)42;  //向文件中序列化整数
file.close();
//输出文件流
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); //从文件中读取序列化的数据
QString str;
qint32 answer;
in >> str >> answer; //读取文本:the answer is 42
file.close();

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/83685868