QFile
QFile提供一个用于读/写的接口,是一个可以用来读/写二进制文件的Qt资源的I/O设备,QFile可以单独使用,一般配合QTextStream或QDataStream
输入文件路径时最好使用"/"作为分隔符
构造函数:
常用的函数:因为继承自QIODevice函数大多来自QIODevice
open() | 打开 |
close() | 关闭文件 |
flush() | 刷新 |
setFileName() | 设置打开的文件 |
exist() | 判断文件是否存在 |
remove() | 删除该文件 |
size() | 文件大小 |
atend() | 是否在文件末尾 |
pos() | 获取位置 |
seek() | 调整位置 |
resize() | 调整文件大小 |
moveToTrash () | 垃圾箱 |
读取文件操作:
- read
- readLine
- readAll
- getChar(char *c) 读取一个字符到c
写入文件操作:
- write
- putChar
- ungetChar 撤销 getChar的操作
打开一个文件读取一行内容:
文件内容为:
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::ReadOnly);//设置自读打开方式
if(file.isOpen())//如果打开成功
{
qDebug()<<file.readLine();//读取一行
}
file.close();//关闭文件
注意读取结果出现\r\n
解决方法:需要在打开方式中添加 QIODevice::Text
- 将 Windows 样式的行终止符 (“\r\n”) 转换为 C++ 样式的行终止符 (“\n”)
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式
if(file.isOpen())//如果打开成功
{
qDebug()<<file.readLine();//读取一行
}
file.close();//关闭文件
读取全部内容:
把qDebug()<<file.readLine();//读取一行 改为
qDebug()<<file.readAll();//读取全部
也可以使用循环一行一行读取全部内容:
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式
if(file.isOpen())//如果打开成功
{
while(!file.atEnd())//判断是否为文件末尾
{
qDebug()<<file.readLine();
}
}
file.close();//关闭文件
获取一个字符
获取一个字符后,读取位置会往后挪一位。
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式
if(file.isOpen())//如果打开成功
{
qDebug()<<file.pos();//初始位置为0
char c;
qDebug()<<file.getChar(&c);
qDebug()<<c;//输出该字符
qDebug()<<file.pos();//输出目前的位置
}
file.close();//关闭文件
使用seek()调整读取位置
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式
if(file.isOpen())//如果打开成功
{
char c;
qDebug()<<file.getChar(&c);//获取一个字符,读取成功返回true
qDebug()<<c;//输出该字符
qDebug()<<file.pos();//输出目前的位置
file.seek(20);//调整到第20个位置
file.getChar(&c);//读取一个字符
qDebug()<<c;//输出该字符
qDebug()<<file.pos();//输出目前的位置
}
file.close();//关闭文件
写入内容到文件:
- QIODevice::Append 将所有数据写入文件末尾
- QIODevice::WriteOnly 写入模式(单独使用相当于截断)除非与 ReadOnly、Append 或 NewOnly 结合使用
写入到文件末尾:
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::WriteOnly|QIODevice::Append);//设置写入并追加
if(file.isOpen())//如果打开成功
{
file.write("\n6666666");//将数据写入
}
file.close();//关闭文件
写入到任何位置:
通过seek()设置写入位置
QFile file("D:/Qt_text/456.txt");
file.open(QIODevice::WriteOnly|QIODevice::ReadOnly|QIODevice::Text);//
if(file.isOpen())//如果打开成功
{
file.write("\n6666666");//将数据写入到开头
file.seek(20);//设置位置
file.write("\n6666666");//将数据写入20的位置
}
file.close();//关闭文件