QFile
用于进行文件操作,提供读写文件的接口
QTextStream
用于处理文本文件,提供读写文件的接口
QDataStream
用于处理二进制文件
QTemporaryFile
用于处理临时文件
QFileInfo
可以获取文件信息
QDir
可以处理目录
QFileSystemWatcher
可以监视文件和目录变化
-
QFile 读写文本
QFile file("textFile1.txt"); // 指定文件名 if(file.open(QIODevice::ReadOnly)) // ReadOnly只读WriteOnly只写ReadWrite读写 { char buffer[2048]; qint64 lineLen = file.readLine(buffer,sizeof(buffer)); // 按行读 if(lineLen!=-1) // 如果失败返回-1,成功返回实际字节 { qDebug()<<buffer; } }
-
QTextStream 读写文本
QFile data("data.txt"); if(data.open(QFile::WriteOnly|QFile::Truncate)) // Truncate表示对原文件内容清空 { QTextStream out(&data); out<<QObject::tr("score:")<<qSetFieldWidth(10)<<left<<90<< endl; // qSetFieldWidth设置字段宽度的格式化函数,left输出时格式左对齐 }
格式化函数介绍
流操作符
-
QDataStream读写二进制文件
/*将二进制数据写到数据流 */ QFile file("binary.dat"); file.open(QIODevice::WriteOnly | QIODevice::Truncate); QDataStream out(&file); //将数据序列化 out << QString(tr("周何骏:")); //字符串序列化 out << QDate::fromString("1996/09/25", "yyyy/MM/dd"); out << (qint32)21; //整数序列化 file.close(); /*从文件中读取数据 */ file.setFileName("binary.dat"); if(!file.open(QIODevice::ReadOnly)) { qDebug()<< "error!"; return; } QDataStream in(&file); //从文件中读出数据 QString name; QDate birthday; qint32 age; in >> name >> birthday >> age; //获取字符串和整数 qDebug() << name << birthday << age; file.close();
读取的时候要和写入的时候类型相同的读出
读原始数据,可以使用readRawdata()读取,并保存到定义好的char*缓存中
写原始数据,可以使用writeRawdata()写入
读写原始数据需要对数据进行编码和解码。 -
QDir目录操作与文件系统
Qt使用"/“作为通用的目录分隔符和URL路径分隔符。底层会根据操作系统的不同转换为”/“和”"
isRelative()
和isAbsolute()
函数可以判断QDir对象是相对路径还是绝对路径,将相对路径转为绝对路径可以使用函数makeAbsolute()
函数
path()
可以返回目录的路径,可以通过setPath()设置新路径。
dirName()
可以获得目录名
mkdir()
可以创建目录
rename()
可以改变目录名
exists()
判读目录是否存在
isRoot()
和isReadable()获得目录属性
count()
统计目录下的条目,包括文件、目录和符号连接,总的条目数。
entryList()
返回目录下所有条目组成的字符串链表。
remove()
删除文件
redir()
删除目录
QFileInfoList QDir::entryInfoList
(
const QStringList &nameFilters,
//此参数指定了文件名的过滤方式,如“*”,“.tar.gz”
Filters filters=NoFilter,
//此参数指定了文件属性的过滤方式,如目录、文件、读写属性等
SortFlags sort=NoSort
//此参数指定了列表的排序情况
)const
// 示例
QFileInfoList list=dir.entryInfoList(string,QDir::AllEntries,QDir:: DirsFirst);
**QDir::Filter()过滤方式**
QDir::SortFlag()排序方式
-
QFileInfo获取文件信息
QString fileName = QFileDialog::getOpenFileName(this,"打开","/", "files (*)"); QString file = fileName ; QFileInfo info(file); // 根据输入参数创建一个QFileInfo对象 qint64 size = info.size(); // 获得QFileInfo对象的大小 QDateTime created = info.created(); // 获得QFileInfo对象的创建时间 QDateTime lastModified = info.lastModified(); // 获得QFileInfo对象的最后修改时间 QDateTime lastRead = info.lastRead(); // 获得QFileInfo对象的最后访问时间 /* 判断QFileInfo对象的文件类型属性 */ bool isDir = info.isDir(); // 是否为目录 bool isFile = info.isFile(); // 是否为文件 bool isSymLink = info.isSymLink(); // 判断是否为符号连接 bool isHidden = info.isHidden(); // 判断QFileInfo对象的隐藏属性 bool isReadable = info.isReadable(); // 判断QFileInfo对象的读属性 bool isWritable = info.isWritable(); // 判断QFileInfo对象的写属性 bool isExecutable = info.isExecutable(); // 判断QFileInfo对象的可执行属性
注意:QFileInfo是一次性将文件信息读到缓存中,后续文件信息改变后,可以通过refresh()方法刷新文件信息,也可以通过setCaching()方法关闭缓存功能。 -
QFileSystemWatcher监视文件和目录变化
addPath()
// 添加指定的文件和目录
addPaths()
// 添加多个监视目录
removePath()
// 移除不需要监视的目录
removePaths()
// 移除不需要监视的多个目录
fileChanged()
// 当监视的文件被修改或删除时产生信号
directoryChanged()
// 当监视的目录被改变或者删除时产生的信号QFileSystemWatcher fsWatcher; fsWatcher.addPath(path); connect(&fsWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(*****));