文章目录
一、对话框读写文件
读文件
- 需要导入的头文件
- 使用QFileDilog读取文件的路径,初始化文件读取的对象,设置文件的读取的方式,将读取的内容存入到ByteArray数组中
// 参数: 指定父对象,文件操作方式,文件路径,限制打开的文件类型 QString path = QFileDialog::getOpenFileName(this, "open", "../", "TXT(*.txt)"); if(path.isEmpty() == false){ // 文件对象 QFile file(path); // 打开文件 bool isOk = file.open(QIODevice::ReadOnly); // 以只读的方式打开 if(isOk == true){ // 读取文件内容,全部存储到字节数组中, 默认只识别utf-8的编码 QByteArray array = file.readAll(); // 显示到编辑区 // 可以使用QString(byteArray)将arrayy转换,也可以直接写入到text中可以自动转换 ui->textEdit->setText(array); } file.close(); // 最后需要关闭文件 }
- 通过指针的方式读取每一行数据
if(isOk == true){ QByteArray array; while(file.atEnd() == false){ // 读取一行数据 array += file.readLine(); //readLine默认读取最大值 } ui->textEdit->setText(array); }
写文件
void Widget::on_pushButton_2_clicked()
{
QString path = QFileDialog::getSaveFileName(this, "save", "../", "TXT(*.txt)");
if(path.isEmpty() == false){
QFile writeFile; //创建写文件对象
writeFile.setFileName(path); // 关联文件名字
// 以只写的方式打开文件
bool isOk = writeFile.open(QIODevice::WriteOnly);
if(isOk == true){
// 获取编辑区的内容
QString str = ui->textEdit->toPlainText();
#if 0
// 写文件,需要以utf-8的编码格式写入
// QString->QByteArray
writeFile.write(str.toUtf8());
#endif
#if 0
// 第二种写入的方式
// QString -> c++ string ->char *
writeFile.write(str.toStdString().data());
#endif
// QString -> QByteArray
QString str = "123";
QByteArray a = str.toUtf8();
a = str.toLocal8Bit(); // 转换为本地编码
// QbyteArray -> char*
char *b = a.data();
// char* -> QString
char *p = "abc";
QString c = QString(p);
}
writeFile.close();
}
}
二、获取文件的信息 Info
需要导入头文件 QFileInfo QDateTime(格式化输出时间)
#if 1 // 获取文件的信息
QFileInfo info(path);
qDebug() << "文件名字 :" << info.fileName();
qDebug() << "文件后缀 :" << info.suffix();
qDebug() << "文件大小 :" << info.size();
// 导入头文件 QDateTime 可以设定日期的输出格式
qDebug() << "文件创建时间 :" << info.created().toString("yyyy-MM-dd hh:mm:ss.zzz");
#endif
三、QDataStream 读写文件-(二进制读取文件)
以二进制( 流 )的方式读取文件
小技巧: qDebug() 可以使用 #define写为cout, 使用宏可以输出所在的文件和行数
// __FILE__ 打印所在文件 __LINE__打印所在行号
#define cout qDebug() << "[" << __FILE__ << ":" << __LINE__ << "]"
void Widget::writeDate(){
// 创建文件对象
QFile file("../test.txt");
// 打开文件,以只写的方式
bool isOK = file.open(QIODevice::WriteOnly);
if(true == isOK){
// 创建数据流,和file文件关联,
QDataStream stream(&file);
// 这样给数据流中输入数据就相当于往文件中输入数据
stream << QString("主要看气质") << 250;
}
file.close();
}
void Widget::readDate(){
QFile file("../test.txt");
// 打开文件,以只读的方式
bool isOK = file.open(QIODevice::ReadOnly);
if(true == isOK){
QDataStream stream(&file);
// 读的时候以写的顺序读取
QString str;
int a;
stream >> str >> a;
cout << str << a;
file.close();
}
}
四、QTextStream操作文件-文本方式(读写的时候可以指定编码)
void Widget::writeTextData(){
QFile file;
file.setFileName("../textDemo.txt");
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true){
// 关联文件
QTextStream stream(&file);
// 指定编码
stream.setCodec("UTF-8");
stream << QString("天气真好") << 1223;
file.close();
}
}
void Widget::readTextData(){
QFile file;
file.setFileName("../textDemo.txt");
bool isOK = file.open(QIODevice::ReadOnly);
if(isOK == true){
// 关联文件
QTextStream stream(&file);
// 指定读取的编码格式
stream.setCodec("UTF-8");
QString str;
int num;
str = stream.readAll();
file.close();
}
}
五、QBuffer 内存存储内容
将内容存储到内存中,也可以指定存储到 QByteArray中 (需要导入头文件 QBuffer)
void Widget::bufferData(){
QBuffer memWrite;
memWrite.open(QIODevice::WriteOnly);
QDataStream stream(&memWrite);
stream << QString("测试") << 250;
memWrite.close();
memWrite.open(QIODevice::ReadOnly);
QDataStream in;
in.setDevice(&memWrite);
QString str;
int a;
in >> str >> a;
memWrite.close();
cout << str << a;
}