Qt 提供了两种读写纯文本文件的基本方法:
- 用 QFile 类的 IODevice 读写功能直接进行读写
- 利用 QFile 和 QTextStream 结合起来,用流(Stream)的方法进行文件读写。
1. 用QFile类的IODevice进行文本读写
QFile打开文本函数
#include <QFile>
QFile::open()
参数:
QIODevice::ReadOnly:以只读方式打开文件,用于载入文件。
QIODevice::WriteOnly:以只写方式打开文件,用于保存文件。
QIODevice::ReadWrite:以读写方式打开。
QIODevice::Append:以添加模式打开,新写入文件的数据添加到文件尾部。
QIODevice::Truncate:以截取方式打开文件,文件原有的内容全部被删除。
QIODevice::Text:以文本方式打开文件,读取时“\n”被自动翻译为换行符,写入时字符串结束符会自动翻译为
读文本
读取文本所有数据
readAll()
QString fileName = "text.txt";
QFile file(fileName);
if(!file.exists()){
return false;
}
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
return false;
}
QString str = file.readAll();
qDebug<<str;
file.close();
写文本
写数据至文本
write()
QString fileName = "text.txt";
QFile file(fileName);
if(!file.exists()){
return false;
}
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
return false;
}
QString str = "test";
QByteArray array = str.toUtf8();
file.write(array, array.length());
file.close();
return true;
2. 用QTextStream进行文本读写
QTextStream可以与QFile、QTemporaryFile、QBuffer、QTcpSocket和QUdpSocket等IO设备类结合使用
QTextStream的格式化函数
函数 | 功能描述 |
---|---|
qSetFieldWidth(int width) | 设置字段宽度 |
qSetPadChar(QChar ch) | 设置填充字符 |
qSetRealNumberPercision(int precision) | 设置实数精度 |
QTextStream的流操作符
操作符 | 作 用 描 述 |
---|---|
bin | 设置读写的整数为二进制数 |
oct | 设置读写的整数为八进制 |
dec | 设置读写的整数为十进制 |
hex | 设置读写的整数为十六进制 |
showbase | 强制显示进制前缀,如十六进制(0x)、八进制(0)、二进制(0b) |
forcesign | 强制显示符号(+,-) |
forcepoint | 强制显示小数点 |
noshowbase | 不显示进制前缀 |
noforcesign | 不显示符号 |
uppercasebase | 显示大写的进制前缀 |
lowercasebase | 显示小写的进制前缀 |
uppercasedigits | 用大写字母表示 |
lowercasedigits | 用小写字母表示 |
fixed | 固定小数点表示 |
scientific | 科学计数法表示 |
left | 左对齐 |
right | 右对齐 |
center | 居中 |
endl | 换行 |
flush | 清除缓冲 |
读文本
QString fileName = "text.txt";
QFile file(fileName);
if(!file.exists()){
return false;
}
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)){
return false;
}
QTextStream stream(&file);
QString str = stream.readAll();
qDebug<<str;
file.close();
写文本
QString fileName = "text.txt";
QFile file(fileName);
if(!file.exists()){
return false;
}
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){
return false;
}
QString str = "test";
QTextStream stream(&file);
stream<<str;
file.close();
return true;