很高兴在雪易的CSDN遇见你 ,给你糖糖
欢迎大家加入雪易社区-CSDN社区云
前言
本文分享QT对文件的操作技术,希望对各位小伙伴有所帮助!
感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!
你的点赞就是我的动力(^U^)ノ~YO
目录
前言
1. QFile构造函数
2. QFile常用函数
3. 实操
》创建并打开文件.
》判断文件是否存在.
》拷贝文件.
》给文件重命名
》获取用户对指定文件的权限,是否可读
》写入文件
》读取文件数据
》删除文件
》获取文件夹下所有文件
》获取文件夹及子文件夹下所有文件
》获取文件夹下所有子文件夹
结论:
1. QFile构造函数
QFile(const QString & name)
QFile(QObject * parent)
QFile(const QString & name, QObject * parent)
2. QFile常用函数
函数名 | 功能 |
copy() | 复制文件 |
exists() | 检查文件是否存在 |
open() | 打开文件 |
remove() | 删除文件 |
rename() | 修改文件名 |
setFileName() | 设置文件名 |
size() | 文件大小 |
pos() | 文件光标当前位置 |
seek() | 设置文件光标位置 |
atEnd() | 判断当前是否为文件尾 |
read() | 读取文件内容 |
close() | 关闭文件 |
》文件打开模式
模式 | 值 | 描述 |
QIODevice::NotOpen | 0x0000 | 不打开 |
QIODevice::ReadOnly | 0x0001 | 只读方式 |
QIODevice::WriteOnly | 0x0002 | 只写方式,如果文件不存在则会自动创建文件 |
QIODevice::ReadWrite | ReadOnly | WriteOnly | 读写方式 |
QIODevice::Append | 0x0004 | 此模式表明所有数据写入到文件尾 |
QIODevice::Truncate | 0x0008 | 打开文件之前,此文件被截断,原来文件的所有数据会丢失 |
QIODevice::Text | 0x0010 | 读的时候,文件结束标志位会被转为’\n’;写的时候,文件结束标志位会被转为本地编码的结束为,例如win32的结束位’\r\n’ |
QIODevice::UnBuffered | 0x0020 | 不缓存 |
3. 实操
》创建并打开文件.
//初始化时加载文件路径
QFile file("F:/test/xxx.txt");
//以读写的方式打开文件,成功返回true,失败返回false
//想用其他方式打开文件,请看上面的文件打开模式
bool ok = file.open(QIODevice::ReadWrite);
//如果文件不存在,则创建并打开该文件
》判断文件是否存在.
//判断指定文件是否存在.也可以用来判断在指定路径下是否有文件和你将要创建的文件重名.
//存在返回true,不存在返回false
bool exist = QFile::exists("F:/test/xxx.txt");
》拷贝文件.
//把D盘里的xxx.txt拷贝到到F盘,命名为sss.txt
//拷贝成功返回true,失败返回false
bool ok = QFile::copy("D:/xxx.txt", "F:/sss.txt");
》给文件重命名
QFile file("F:/xxx.txt");
bool ok = file.rename("F:/sss.txt");
//重命名成功返回true,失败返回false
//也可以直接调用
bool ok = QFile::remove("F:/xxx.txt", "F:/sss.txt");
》获取用户对指定文件的权限,是否可读
QFlags<QFileDevice::Permission> power = QFile::permissions("F:/xxx.txt");
//判断文件所有者是否可读
if (power.testFlag(QFile::ReadOwner))qDebug("Can Read!");
》写入文件
//定义文件内容字符串
QString str= "写入文件的内容";
QFile file("F:/xxx.txt");
//打开文件,不存在则创建
file.open(QIODevice::ReadWrite | QIODevice::Text);
//写入文件需要字符串为QByteArray格式
file.write(str.toUtf8());
file.close();
》读取文件数据
//先打开文件
QFile file("F:/xxx.txt");
file.open(QIODevice::ReadOnly | QIODevice::Text);//使用QTextStream一行一行读取文件
QTextStream in(&file);
while (!in.atEnd())
{QString line = in.readLine(); //整行读取qDebug() << line;
}
》删除文件
QFile file("F:/xxx.txt");
bool ok = file.remove();
//删除成功返回true,失败返回false
//也可以直接调用
bool ok = QFile::remove("F:/xxx.txt");
》获取文件夹下所有文件
QDir *dir = new QDir("F:/");
QStringList filters;
filters << "*.png" << "*.jpg" << "*.bmp"; //过滤器,过滤你想要的文件后缀
//用链表保存过滤的文件名
QList<QFileInfo> *fileInfo = new QList<QFileInfo>(dir->entryInfoList(filters));//获取文件数目、文件名称
for(int i = 0; i < fileInfo->count(); i++)
{//QFileInfo(路径名的Qstring字符串).filename可以直接取到路径中的文件名qDebug() << fileInfo->at(i).fileName();}
》获取文件夹及子文件夹下所有文件
void getAllFiles(const QString& foldPath, QStringList& folds, const QStringList& formats) {if (formats.size() < 1){QDirIterator it(foldPath, QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);while (it.hasNext()) {it.next();QFileInfo fileInfo = it.fileInfo();folds << fileInfo.absoluteFilePath();}}else{QDirIterator it(foldPath, formats, QDir::Files | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);while (it.hasNext()) {it.next();QFileInfo fileInfo = it.fileInfo();folds << fileInfo.absoluteFilePath();}}
}
》获取文件夹下所有子文件夹
void getAllFolds(const QString& foldPath, QStringList& folds)
{QDirIterator it(foldPath, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);while (it.hasNext()) {it.next();QFileInfo fileInfo = it.fileInfo();if(fileInfo.isFile()){folds << fileInfo.absoluteFilePath();}}
}
结论:
本文主要介绍对文件的操作!
感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!
你的赞赏是我的最最最最大的动力(^U^)ノ~YO