QFile
一、读文件
1.读全部
void MyWidget::on_readFileButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this,"open","../","TXT(*.txt)"); //最后两个参数分别为,默认路径和默认筛选格式
if(path.isEmpty()==false) //如果路径不为空
{
QFile file(path); //创建文件对象
bool isOK = file.open(QIODevice::ReadOnly); //只读模式
if(isOK == true) //打开成功
{
QByteArray array = file.readAll(); //读取
ui->textEdit->setText(array); //设置读取的信息到ui上
}
file.close(); //关闭文件
}
}
2.读一行
void MyWidget::on_readFileButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this,"open","../","TXT(*.txt)");
if(path.isEmpty()==false)
{
QFile file(path);
bool isOK = file.open(QIODevice::ReadOnly);
if(isOK == true)
{
QByteArray array;
while(file.atEnd() == false) //没有到文件结尾
{
array += file.readLine(); //将读到的行追加到数组后面
}
ui->textEdit->setText(array);
}
file.close();
}
}
二、写文件
void MyWidget::on_writeFileButton_clicked()
{
QString path = QFileDialog::getSaveFileName(this,"open","../","TXT(*.txt)");
if(path.isEmpty()==false)
{
QFile file; //创建文件对象
file.setFileName(path);//关联文件
bool isOK = file.open(QIODevice::WriteOnly); //只写模式打开
if(isOK == true)
{
QString str = ui->textEdit->toPlainText();//获取编辑区内容
file.write(str.toStdString().data());//C++方式,转换成char*类型
}
file.close();
}
}
三、编码转换
1.QString ----> 本地编码
QByteArray array=str.toLocal8Bit();
2.QString ----> UTF8编码
QByteArray array=str.toUtf8();
3.QByteArray---->char *
char *charater = array.data();
4.char * ---->QString
QString str = QString(charater);
四、获取文件信息
QFileInfo info(path);
qDebug()<<"文件名"<<info.fileName();
qDebug()<<"文件后缀"<<info.suffix();
qDebug()<<"文件大小"<<info.size();
qDebug()<<"文件创建时间"<<info.birthTime().toString("yyyy-MM-dd hh:mm:ss");//返回QDateTime类型数据
QDataStream
一、使用数据流写数据
void MyWidget::on_writeDataButton_clicked()
{
QFile file("../Test11/1.txt");
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true)
{
QString str = ui->textEdit->toPlainText();
QDataStream stream(&file);//创建数据流和file文件关联
stream<<str;//向数据流中输出内容
}
file.close();
}
二、使用数据流读数据
void MyWidget::on_readDataButton_clicked()
{
QFile file("../Test11/1.txt");
bool isOK = file.open(QIODevice::ReadOnly);
QString str;
if(isOK == true)
{
QDataStream stream(&file);
//QDataStream stream;
//stream.setDevice(&file);
stream>>str;//从数据流中读内容
ui->textEdit_2->setText(str);
}
file.close();
}
注意:使用数据流保存的文件,打开是乱码,因为是二进制文件。
QTextStream
一、写文件
void MyWidget::on_writeButton_2_clicked()
{
QFile file;
file.setFileName("../Test12/1.txt");
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true)
{
QTextStream stream(&file);
QString str;
str = ui->writeEdit->toPlainText();
stream<<str;
}
file.close();
}
二、读文件
void MyWidget::on_ReadButton_clicked()
{
QFile file;
file.setFileName("../Test12/1.txt");
bool isOK = file.open(QIODevice::ReadOnly);
if(isOK == true)
{
QTextStream stream(&file);
QString str = stream.readAll();
ui->readEdit->setText(str);
}
file.close();
}
QBuffer
一、写操作
QByteArray array;
QBuffer memFile(&array);//指定存储的字节数组
memFile.open(QIODevice::WriteOnly);
memFile.write("123");
memFile.write("abc");
memFile.close();
qDebug()<<memFile.buffer();//获取内存中的数据
qDebug()<<"array:"<<array;//输出字节数组
二、读操作
可以使用QDataStream进行读操作,可以将多次写入的数据分开读取。