文件处理
QFile类用于文件操作,它提供了读写文件的接口,可以读写文件、二进制文件和Qt资源文件。
处理文本文件和二进制文件,可以使用QTextStream类和QDataStream类。处理临时文件可以使用QTemporaryFile,获取信息可以使用QFileInfo,处理目录可以使用QDir,监视文件和目录变化可以使用QFileSystemWatcher。
QFile类示例
代码语言:javascript复制#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();
}
操作二进制文件
代码语言:javascript复制#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();
}
示例:获取文件信息
代码语言:javascript复制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());//QDate转字符串
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(*)");
//选择目录QString path = QFileDialog::getExistingDirectory(this,"选择目录",".");
ui->FileNameLineEdit->setText(fileName);//文件名(带路径的)
getFileInfo(fileName);
}