Qt中关于文件夹或文件的操作
1 Qt文件操作
Qt中对于文件操作,利用一个例子讲明白,就说通过按钮选择一个文件并将其内容打开到文本框中,注意:需要包含对应的头文件方可执行。

读文件的方式:
首先要得到这个要打开的文件的路径,先默认打开的界面是桌面,选择路径时需要判断是否选中,这个通过isEmpty这个函数进行判断,若没有选中则进行提示,这个利用QMessageBox进行提示。
但要注意的是,默认打开txt的编码格式为utf-8,否则无法打开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| connect(ui->pushButton,&QPushButton::clicked,[=](){ QString filePath = QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\Administrator\\Desktop"); qDebug()<<filePath; if(filePath.isEmpty()) { QMessageBox::warning(this,"警告","文件路径不能为空"); return; } else { ui->lineEdit->setText(filePath); QFile file(filePath); file.open(QIODevice::ReadOnly); QByteArray array; ui->textEdit->setText(array); file.close(); } }
|
若不是utf-8的格式,也可以通过更改编码格式的方式,正确打开该文件,以gbk格式为例,同时打开方式也可以按行打开,通过atEnd函数来判断是否到了文件尾。但此时也就无法打开utf-8格式的文本了,所以需要通过if-else语句来选择何种编码格式,对应何种打开方式,而编码方式可以取出文本的第一个字符来看看进行判断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| QTextCodec * codec = QTextCodec::codecForName("gbk");
QFile file(filePath);
file.open(QIODevice::ReadOnly); QByteArray array;
array = file.readLine(); while(!file.atEnd()) { array += file.readLine(); }
ui->textEdit->setText( codec->toUnicode(array) ); file.close();
|
写文件的方式:主要是通过append进行追加文本,否则将会替换打开文本中的内容。
1 2 3 4
| file.open(QIODevice::Append); file.write("啊啊啊"); file.close();
|
读取文本的信息:其中最为重要的是suffix函数,它可以得到文件的后缀名,通过判断后缀名来选择打开的文件的方式。
1 2 3 4
| QFileInfo info(filePath); qDebug()<<"文件的后缀名:"<<info.suffix()<<"文件大小"<<info.size(); qDebug()<<"创建日期:"<<info.created().toString("yyyy-MM-dd hh:mm:ss");
|
2 Qt获取文件夹下文件信息,排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include #include int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QString path = "......"; QDir dir(path); dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setNameFilters(QStringList("*.xml")); dir.setSorting(QDir::Size | QDir::Reversed | QDir::Name); qDebug()<< dir.count() <<Qt::endl; QFileInfoList list = dir.entryInfoList(); std::cout << " Bytes Filename" << std::endl; for (int i = 0; i < list.size(); ++i) { QFileInfo fileInfo = list.at(i); std::cout << qPrintable(QString("%1 %2").arg(fileInfo.size(), 10).arg(fileInfo.fileName())); QFile file(fileInfo.absoluteFilePath()); if (!file.exists()){ qDebug()<<"文件不存在"<<Qt::endl; return; } if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"文件打开失败"<<Qt::endl; file.close(); return; } QString sendstr = file.readAll(); QByteArray sendarr = sendstr.toUtf8(); file.close(); } return 0; }
|
递归遍历子目录:
1 2 3 4 5 6 7 8 9 10 11 12 13
| QFileInfoList GetFileList(QString path) { QDir dir(path); QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks); QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); for(int i = 0; i != folder_list.size(); i++) { QString name = folder_list.at(i).absoluteFilePath(); QFileInfoList child_file_list = GetFileList(name); file_list.append(child_file_list); } return file_list; }
|