QTextStream 是一个功能强大的类,用于处理文本数据,特别是在需要考虑字符编码和文本格式化的情况下。通过这些特性,它提供了一种灵活而强大的方式来读写和操作文本。
因为QFile本身并不关心文件的编码方式;它只负责读取或写入字节数据。编码的处理通常是在更高层的文本处理类(如QTextStream)中进行的。因此,如果你想要确保以特定的编码方式读取文件,你应该在使用这些高层类时明确设置编码方式。
使用Utf8读取文件
void Widget::on_btnsread_clicked()
{// 1. 打开文件QFile file("C:\\Users\\30624\\Desktop\\zhuochong\\notebook\\test.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qDebug() << "Failed to open file";return;}// 2. 读取文件QTextStream in(&file); // 将 QFile 对象传递给 QTextStream 构造函数//in.setCodec("UTF-8"); // 设置编码为 UTF-8,QT6已经淘汰该函数了,所以我们用setEncodingin.setEncoding(QStringConverter::Utf8);QString context = in.readAll(); // 读取整个文件的内容qDebug() << context;// 3. 关闭文件(实际上,当 QTextStream 对象超出作用域时,它会自动关闭关联的 QFile)// 但为了明确和避免潜在的资源泄露,最好还是手动关闭file.close();
}
当文件很大时,我们应该逐行读取
void Widget::on_btnslineread_clicked()
{// 1. 打开文件QFile file("C:\\Users\\30624\\Desktop\\zhuochong\\notebook\\test.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qDebug() << "Failed to open file";return;}// 2. 读取文件QTextStream in(&file); // 将 QFile 对象传递给 QTextStream 构造函数//in.setCodec("UTF-8"); // 设置编码为 UTF-8,QT6已经淘汰该函数了,所以我们用setEncodingin.setEncoding(QStringConverter::Utf8);while (!in.atEnd()) {//判断是否到底最后一行QString context = in.readLine();//读取当前光标一行,再把光标移动到下一行开头qDebug() << context;}// 3. 关闭文件(实际上,当 QTextStream 对象超出作用域时,它会自动关闭关联的 QFile)// 但为了明确和避免潜在的资源泄露,最好还是手动关闭file.close();
}
覆盖写入
void Widget::on_btnswrite_clicked()
{// 1. 打开文件QFile file("C:\\Users\\30624\\Desktop\\zhuochong\\notebook\\test.txt");if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {qDebug() << "Failed to open file";return;}// 2.写入文件QTextStream out(&file);out.setEncoding(QStringConverter::Utf8);out << "我写入的";// 3. 关闭文件(实际上,当 QTextStream 对象超出作用域时,它会自动关闭关联的 QFile)// 但为了明确和避免潜在的资源泄露,最好还是手动关闭file.close();
}