Qt文件操作:
1、QFile QTextStream操作文件案例:
1、打开文件
QFile file(absolute filepath | relative path);
file.readLine()返回内容长度,如果为-1就是读取失败
file. Close()读取后关闭
file.errorString()返回文件打开发生的错误
2、文件写入
//文件写入
double dPi = 3.1415926;
int age = 13;
QFile dataFile;
dataFile.setFileName(R"(P:\Qt_study_rebegin\Qt_basic\01_basic_lesson\project01\src\build-qiniu_016-Desktop_Qt_5_15_2_MSVC2019_64bit-Debug\debug\data.txt)");
// 检查文件是否存在
if (!dataFile.exists()) {
// 文件不存在,创建文件
if (dataFile.open(QIODevice::WriteOnly)) {
qDebug() << "File created successfully.";
// 创建一个QTextStream对象out,并将其关联到dataFile文件上
QTextStream out(&dataFile);
// 设置实数(浮点数)的输出精度为3位小数
out.setRealNumberPrecision(3);
// 设置字段宽度为10个字符,写入的数据将按照10个字符的宽度进行排列
out.setFieldWidth(10);
// 设置字段对齐方式为右对齐,写入的数据将在字段宽度内右对齐显示,左侧留有空格填充
out.setFieldAlignment(QTextStream::AlignRight);
out<<QString("PI: ")
<<scientific
<<left
<<dPi
<<hex
<<Qt::showbase
<<uppercasebase
<<age;
dataFile.close();
} else {
qDebug() << "Failed to create file.";
}
} else {
qDebug() << "File already exists.";
}
3、文件存储并输出
QFile binfile("info.txt");
if(binfile.open(QIODevice::WriteOnly|QIODevice::Truncate))
{
// 创建一个数据流对象,并将其关联到文件上
QDataStream out(&binfile);
// 写入数据到数据流中
out << QString("易烊千玺") // 字符串数据
<< QDate::fromString("2000-11-28","yyyy-MM-dd") // 日期数据
<< (qint32)19; // 整数数据
// 关闭文件
binfile.close();
}
else
{
// 输出错误信息
qDebug() << binfile.errorString();
}
// 设置文件名为 info.txt
binfile.setFileName("info.txt");
// 以只读方式打开文件
if(binfile.open(QIODevice::ReadOnly))
{
// 创建一个数据流对象,并将其关联到文件上
QDataStream in(&binfile);
// 定义变量用于存储读取的数据
QString name;
QDate birthday;
qint32 age;
// 从数据流中读取数据
in >> name >> birthday >> age;
// 关闭文件
binfile.close();
// 输出读取的数据
qDebug() << "Name:" << name;
qDebug() << "Birthday:" << birthday.toString("yyyy-MM-dd");
qDebug() << "Age:" << age;
}
else
{
// 输出错误信息
qDebug() << binfile.errorString();
}
2、QFileInfo类获取文件信息
// 计算目录大小的递归函数
qint64 Widget::calculateDirSize(const QString &dirPath) {
qint64 totalSize = 0;
// 创建 QDir 对象并设置过滤器
QDir dir(dirPath);
dir.setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
// 获取目录下的文件和子目录信息列表
QFileInfoList fileInfoList = dir.entryInfoList();
// 遍历文件和子目录信息列表
for (const QFileInfo &info : fileInfoList) {
// 如果是文件,则累加文件大小
if (info.isFile()) {
totalSize += info.size();
}
// 如果是子目录,则递归调用计算目录大小函数,并累加子目录大小
else if (info.isDir()) {
totalSize += calculateDirSize(info.filePath());
}
}
return totalSize;
}
// 获取文件信息并显示在界面上的函数
void Widget::getFileInfo(QString &filename) {
// 创建 QFileInfo 对象获取文件/目录信息
QFileInfo info(filename);
// 根据文件类型获取大小,如果是目录则调用计算目录大小函数
qint64 size = info.isDir() ? calculateDirSize(filename) : info.size();
QDateTime createtime = info.created();
QDateTime lasttime = info.lastModified();
QDateTime lastrtime = info.lastRead(); // 最后一次访问
// 获取文件属性信息
bool isdir = info.isDir();
bool isfile = info.isFile();
bool islink = info.isSymLink();
bool ishidden = info.isHidden();
bool isread = info.isReadable();
bool iswrite = info.isWritable();
bool isexcute = info.isExecutable();
// 将文件信息显示在界面上
ui->size->setText(QString::number(size));
ui->create->setText(createtime.toString());
ui->dir->setChecked(isdir); // 设置目录选中状态
}
// 浏览按钮点击事件的处理函数
void Widget::on_browsebtn_clicked() {
// 弹出文件选择对话框选择目录
QString path = QFileDialog::getExistingDirectory(this, "选择目录", ",");
ui->name->setText(path); // 在界面上显示选择的目录路径
getFileInfo(path); // 获取目录信息并显示在界面上
}
效果展示: