Qt中自己定义一套对文件的读写操作:QFile 常用的读写模式如下:
QIODevice::ReadOnly:文件以只读的形式打开QIODevice::WriteOnly:文件以写的形式打开,该方式写入的新内容会覆盖掉之前的内容。QIODevice::ReadWrite:文件以读写的方式打开QIODevice::Append:文件以追加的方式打开,新写入的内容会被添加到文件的末尾,原来的内容会被保留QIODevice::Text:将每行的结束字符根据具体的环境转换成对应的形式,一般都附带该项QIODevice::Truncate:以截断的方式来打开文件QIODevice::NotOpen:文件没有被打开Qt 默认支持格式为UTF-8,如果读取的文件为GBK或者ANSI格式,则需要特别设置读取文件格式。
(1)、读取UTF-8格式文件,正常显示如下:
(2)、读取gbk格式文件时,中文字体将出现乱码,如下图:
(1)、设置读取读取编码格式的类为QTextCodec,修改的代码部分如下: (2)、运行结果gbk格式文件可以正常读取,但utf-8将会出现乱码
(1)、具体代码如下
(2)、读取的文件全部内容如下:
(1)、如读取文件前 8 8 8 行,代码如下:
(2)、运行的结果如下,只显示前 8 8 8行:
(1)、读取文件后8行,mainwindow.cpp代码如下:
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QFileDialog> //用于弹出文件对话框,供选择文件 #include<QFile> //用于读取文件内容 #include<QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //点击选取文件按钮,打开文件对话框 connect(ui->btnPath,&QPushButton::clicked,this,[=]{ QString filePath = QFileDialog::getOpenFileName(this,"打开文件","D:\\Temp"); //将文件的绝对路径放到 lineEdit ui->lineEdit->setText(filePath); //将文件的内容读取出来,显示到 TextEdit 上 QFile file(filePath);//该对象用来计算总的行数 QFile file2(filePath);//该对象用来打印具体的数据 //对绑定的文件进行操作,首先设置打开的方式为只读 file.open(QIODevice::ReadOnly); file2.open(QIODevice::ReadOnly); //逐行读取文件内容,以字节数组的形式来保存 QByteArray arr; //统计总的行数 int linesNum=0; while(!file.atEnd()) { arr=file.readLine(); ++linesNum; } file.close(); //要打印末尾的行数 int printCounts=8; //总的行数小于待打印的行数时,全部打印出来。 if(linesNum<=printCounts) { while(!file2.atEnd()) { arr+=file2.readLine(); } } else { int curIndex=linesNum-printCounts+1; while(curIndex) { arr=file2.readLine(); --curIndex; } while(!file2.atEnd()) { arr+=file2.readLine(); } } //将文件内容显示出来。QByteArray 可以直接转换成 QString ui->textEdit->setText(arr); file2.close(); }); } MainWindow::~MainWindow() { delete ui; }(2)、运行结果如下,只显示后8行:
(1)、在程序内部不通过控制台写入内容:
#include "QtWriteFile.h" #include<qfile.h> #include<qtextstream.h> QtWriteFile::QtWriteFile(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); //创建文件对象,并用指定文件进行初始化 QString fileName = "D:\\Temp\\writeFile.txt"; QFile file(fileName); //设置文件的打开方式 file.open(QIODevice::Append | QIODevice::Text); //创建流对象,并将其绑定到对应文件上 QTextStream out(&file); //设置文件的写入编码格式 out.setCodec("UTF-8"); //写入文件的内容 QString strContent = "Hello this is just a test for QTextStream.\n"; out << strContent; out << "Qt Project " << 99 << "\n"; file.close(); }(2)、通过控制台来交互的写入内容:
输入输出流的格式有,stdin:输入流;stdout:输出流;stderr:输出错误信息通过QTextStream创建流对象,并设定为输入流readLineInto():每次可以输入一行的内容,以换行符作为结束符。返回值为bool类型>>每次输入以空格作为结束符 #include "QtWriteFile.h" #include<qfile.h> #include<qtextstream.h> #include<qdebug.h> QtWriteFile::QtWriteFile(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); //创建文件对象,并用指定文件进行初始化 QString fileName = "D:\\Temp\\writeFile.txt"; QFile file(fileName); //设置文件的打开方式 file.open(QIODevice::Append | QIODevice::Text); //创建流对象,并将其绑定到对应文件上,用于向其写入数据 QTextStream out(&file); //创建流对象,并设定其为输入流 QTextStream in(stdin); QString strContent; //设置文件的写入编码格式 out.setCodec("UTF-8"); qDebug() << "Please input some string for test: " << endl; //in >> strContent;//每次遇到空格就结束 //out << strContent;//将控制台的输入内容,写入到文件中 in.readLineInto(&strContent);//每次可以输入一行内容,以换行符作为结束符 qDebug() << strContent << endl; out << strContent; file.close(); }结果如下: