Qt之读写文件

1.思路
读写文件的基本操作:
读文件
写文件
打开文件
打开文件
读取文件
写入文件
关闭文件
关闭文件
2.QFile实现读写文件QFile类提供读写文件的接口。它的构造函数如下:QFile(constQString&name)QFile(QObject*parent)QFile(constQString&name,QObject*parent)通过它的构造函数我们可以知道,可以直接在调用构造函数的时候直接传递文件名给QFile类,这是常用的方法,或者我们先生成QFile对象,然后调用setFileName()方法来设置文件。其中文件名中的路径分隔符要求必须是’/’,其他分隔符QFile不支持。然后再了解下QFile的常用函数以及打开文件的模式类型:QFile的常用函数:
函数名
功能
copy()
复制文件
exists()
检查文件是否存在
open()
打开文件
remove()
删除文件
rename()
修改文件名
setFileName()
设置文件名
size()
文件大小
pos()
文件光标当前位置
seek()
设置文件光标位置
atEnd()
判断当前是否为文件尾
read()
读取文件内容
close()
关闭文件
文件打开模式
【领QT开发教程学习资料,点击下方链接莬费领取↓↓,先码住不迷路~】
点击→领取「链接」
模式
值
描述
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
不缓存
下面通过代码来看看QFile的使用:
//example1QFilefile(“test.csv”);//已读写方式打开文件,//如果文件不存在会自动创建文件if(!file.open(QIODevice::ReadWrite)){//ReadOnly文件不存在,打开失败//WriteOnly文件不存在,会自动创建文件//ReadWrite文件不存在,会自动创建文件//Append文件不存在,会自动创建文件//Truncate文件不存在,打开失败//Text文件不存在,打开失败//Unbuffered文件不存在,打开失败qDebug()<<“打开失败”;}else{qDebug()<<“打开成功”;}//操作文件//关闭文件file.close();
写文件
//example2QFilefile(“test.csv”);//判断文件是否存在if(file.exists()){qDebug()<<“文件已存在”;}else{qDebug()<<“文件不存在”;}//已读写方式打开文件,//如果文件不存在会自动创建文件if(!file.open(QIODevice::ReadWrite)){qDebug()<<“打开失败”;}else{qDebug()<<“打开成功”;}//获得文件大小qint64pos;pos=file.size();//重新定位文件输入位置,这里是定位到文件尾端file.seek(pos);QStringcontent=“welcometoBeiJing”;//写入文件qint64length=-1;length=file.write(content.toLatin1(),content.length());if(length==-1){qDebug()<<“写入文件失败”;}else{qDebug()<<“写入文件成功”;}//关闭文件file.close();
控制台运行结果:
打开文件看看里面的内容:
正是我们程序中写入的内容。
读文件我们现在test.csv文件内准备两行数据
代码如下:
QFilefile(“test.csv”);//判断文件是否存在if(file.exists()){qDebug()<<“文件已存在”;}else{qDebug()<<“文件不存在”;}//已读写方式打开文件,//如果文件不存在会自动创建文件if(!file.open(QIODevice::ReadWrite)){qDebug()<<“打开失败”;}else{qDebug()<<“打开成功”;}//读取文件intline=1;//判断文件是否已经读到末尾了while(!file.atEnd()){charbuffer[1024];//读取一行数据qint64length=file.readLine(buffer,1024);if(length!=-1){qDebug()<<line++<<“:”<<buffer;}}//关闭文件file.close();
控制台输出结果如下:
和我们开始文件中准备的内容一致,表明已成功读取。