Qt提供了QFile类用于进行文件操作。QFile类提供了读写文件的接口,可以读写文本文件、二进制文件和Qt的资源文件。
1、处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类;
2 、处理临时文件可以使用QTemporaryFile;
3、获取文件信息可以使用QFileInfo;
4、处理目录可以使用QDir;
5、监视文件和目录变化可以使用QFileSystemWatcher。
读写文本文件的方法通常有两种:一种是直接利用传统的QFile类方法;另一种是利用更方便的QTextStream。
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile file("textFile1.txt"); //(a)
if(file.open(QIODevice::ReadOnly)){ //(b)
char buffer[2048];
qint64 lineLen = file.readLine(buffer,sizeof(buffer));//(c)
if(lineLen != -1){ //(d)
qDebug()<
打开文件有两种方式。一种方式是在构造函数中指定文件名;另一种方式是使用setFileName()函数设置文件名。
打开文件使用open()函数,关闭文件使用close()函数。
只读方式--QIODevice:ReadOnly;
只写方式--QIODevice:WriterOnly;
可读可写--QIODevice:ReadWrite。
在QFile中可以使用从QIODevice中继承的readLine()函数读取文件的一行。
如果读取成功,则readLine()函数返回实际读取的字节数;如果读取失败,则返回“-1”。
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QFile data("data.txt");
if(data.open(QFile::WriteOnly | QFile::Truncate)){ //(a)
QTextStream out(&data);
out<
注意:程序运行后会在debug文件里生成一个data.txt文件,文件里的内容是“score:100”
QFile::Truncate表示将原本文件中的内容清空。输出时将格式设为左对齐,占10个字符位置。
用户使用格式化函数和流操作符设置需要的输出格式。
QTextStream的格式化函数
函数 | 功能描述 |
qSetFieldWidth(int width) | 设置字段宽度 |
qSetPedChar(QChar ch) | 设置填充字符 |
qSetRealNumberPercision(int precision) | 设置实数精度 |
QTextStream的流操作符
操作符 | 作用描述 |
left | 左对齐 |
right | 右对齐 |
center | 居中 |
endl | 换行 |
flush | 清楚缓冲 |
bin | 设置读写的整数为二进制数 |
oct | 设置读写的整数为八进制数 |
dec | 设置读写的整数位十进制数 |
hex |
设置读写的整数为十六进制数 |
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
fileFun();
}
MainWindow::~MainWindow()
{
}
void MainWindow::fileFun()
{
/* 将二进制数据写到数据流 */
QFile file("binary.dat");
file.open(QIODevice::WriteOnly | QIODevice::Truncate);
QDataStream out(&file); //数据序列化
out<>name>>birthday>>age;
qDebug()<
QDir类具有存取目录结构和内容的能力,使用它可以操作目录、存取目录或文件信息、操作底层文件系统。而且还可以存取Qt的资源文件。
Qt使用“/”作为通用的目录分隔符和URL路径分隔符。
QDir可以使用相对路径或者绝对路径指向一个文件。isRelative()、isAbsolute()函数判断QDir对象使用的是绝对路径还是相对路径。makeAbsolute()可以将相对路径转换为绝对路径。
path():返回目录路径;
setPath():设置新路径;
absolutePath():返回绝对路径;
dirName():获得目录名;
cd():改变目录的路径;
cdUp():改变目录的路径;
mkdir():创建目录;
rename():改变目录名;
exists():判断目录是否从在;
isReadable()、isAbsolute()、isRelative()、isRoot():获取目录属性;
count():统计目录下的总条目;
entryList():返回目录下所有条目组成的字符串链表;
remove():删除文件;
rmdir():删除目录;
#include
#include
#include
#include
qint64 du(const QString &path)
{
QDir dir (path);
qint64 size= 0;
foreach(QFileInfo fileInfo,dir.entryInfoList(QDir::Files))
{
size += fileInfo.size (); //获取第一个dir文件夹内的占用空间
}
foreach(QString subDir,dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
{
size+= du(path+QDir::separator()+subDir); /*循环获得dir后获取的文件*/
}
char unit ='B'; /*记录数据的大小从B,K,M1024)
{
curSize/=1024;
unit ='K';
if (curSize>1024)
{
curSize/=1024;
unit ='M';
if(curSize>1024)
{
curSize/=1024;
unit ='G';
}
}
}
qDebug () <1)
{
path= args[1];
}
else
{
path = QDir::currentPath () ;
}
qDebug()<