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()<
![]()
注意读取结果出现\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()<
![]()
把qDebug()<
qDebug()<
![]()
也可以使用循环一行一行读取全部内容:
QFile file("D:/Qt_text/456.txt");file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式if(file.isOpen())//如果打开成功{while(!file.atEnd())//判断是否为文件末尾{qDebug()<

获取一个字符后,读取位置会往后挪一位。
QFile file("D:/Qt_text/456.txt");file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式if(file.isOpen())//如果打开成功{qDebug()<
使用seek()调整读取位置
QFile file("D:/Qt_text/456.txt");file.open(QIODevice::ReadOnly|QIODevice::Text);//设置自读打开方式if(file.isOpen())//如果打开成功{char c;qDebug()<

- 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();//关闭文件