文件处理
QFile类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制文件和Qt资源文件。
处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类。处理临时文件可以使用QTemporaryFile,获取信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher。
![image-20220124203618757](https://gitee.com/Do2eM0N/blogimg/raw/master/202201242329099.png)
QFile类示例
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 43 44 45 46 47 48
| #include <QCoreApplication> #include<QFile> #include<QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);
QFile file("hello.txt"); if(file.open(QIODevice::ReadOnly)) { char buffer[100]; qint32 n = file.readLine(buffer,sizeof(buffer)); if(n != -1) { qDebug()<<n<<" "<<buffer; file.close(); } } else { qDebug()<<file.errorString(); }
QFile dataFile; double dPI = 3.1415926; int age =19; dataFile.setFileName("data.txt"); if(dataFile.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&dataFile); out.setRealNumberPrecision(3); out.setFieldWidth(20); out.setFieldAlignment(QTextStream::AlignCenter); out<<QString("PI:")<<dPI; out<<bin<<age; out<<hex<<showbase<<age; out<<scientific<<dPI; } return a.exec(); }
|
操作二进制文件
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
| #include <QCoreApplication> #include<QFile> #include<QDebug> #include<QDate> #include<QDataStream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv);
QFile binFile("info.bat"); if(binFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QDataStream out(&binFile); out<<QString("半生瓜のblog")<<QDate::fromString("2022-01-24","yyyy-MM-dd")<<(qint32)19; binFile.close(); } else { qDebug()<<binFile.errorString(); } binFile.setFileName("info.bat"); if(binFile.open(QIODevice::ReadOnly)) { QDataStream in(&binFile); QString Name; QDate NowTime; qint32 Age; in>>Name>>NowTime>>Age; qDebug()<<Name<<NowTime<<Age; binFile.close(); } else { qDebug()<<binFile.errorString(); }
return a.exec(); }
|
示例:获取文件信息
![image-20220124232543877](https://gitee.com/Do2eM0N/blogimg/raw/master/202201242329924.png)
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
| void FileInfo::getFileInfo(QString &fileName) { QFileInfo info(fileName); qint64 size = info.size(); QDateTime createTime = info.created(); QDateTime lastModTime = info.lastModified(); QDateTime lasReadTime = info.lastRead(); bool isDir = info.isDir(); bool isFile = info.isFile(); bool isSymLink = info.isSymLink(); bool isHid = info.isHidden(); bool isReadable = info.isReadable(); bool isWritable = info.isWritable(); bool isExcutable = info.isExecutable();
ui->FileSizeLineEdit->setText(QString::number(size)); ui->CreateTimeLineEdit->setText(createTime.toString()); ui->LastModTimeLineEdit->setText(lastModTime.toString()); ui->LastCheckTimeLineEdit->setText(lasReadTime.toString()); ui->isDirCheckBox->setChecked(isDir); ui->isFileCheckBox->setChecked(isFile); ui->isExecutableCheckBox->setChecked(isExcutable); ui->isSymLinkCheckBox->setChecked(isSymLink); ui->isHiddenCheckBox->setChecked(isHid); ui->isWritableCheckBox->setChecked(isWritable); ui->isReadableCheckBox->setChecked(isReadable);
}
void FileInfo::on_browerFileBtn_clicked() { QString fileName = QFileDialog::getOpenFileName(this,"打开文件",".","files(*)"); ui->FileNameLineEdit->setText(fileName); getFileInfo(fileName); }
|