CSDN话题挑战赛第2期
参赛话题:学习笔记
欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
本章节会给大家带来Qt5 文件及磁盘处理—— 获取文件信息实例详解。
QFilelnfo 类提供了对文件进行操作时获得的文件相关属性信息,包括文件名、文件大小、
创建时间、最后修改时间、最后访问时间及一些文件是否为目录、文件或符号链接和读写属性
等。
注意:
1. 文件的所有权限可以由 owner() 、 ownerld() 、 group() 、 groupld()等方法获得
。测试一个文件的权限可以使用 Permission()方法 。
2. 为了提高执行的效率, QFilelnfo 可以将文件信息进行一次读取缓存,这样后续的访问 就不需要持续访问文件了 。但是,由于文件在读取信息之后可能被其他程序或本程序改变属 性,所以 QFilelnfo 通过refresh()方法提供了一种可以更新文件信息的刷新机制,用户也可以 通过 setCachingQ方法关闭这种缓冲功能 。
3. QFilelnfo 可以使用绝对路径和相对路径指向同一个文件 。 其中,绝对路径以“/”开 头(在 Windows中以磁盘符号开头),相对路径则以目录名或文件名开头, isRelative()方法可 以用来判断 QFilelnfo使用的是绝对路径还是相对路径 。 makeAbsolute()方法可以用来将 相对路径转化为绝对路径 。
图一

#ifndef FILEINFO_H
#define FILEINFO_H
#include
#include
#include
#include
#include
#include
#include
#include
class FileInfo : public QDialog
{
Q_OBJECT
public:
FileInfo(QWidget *parent = 0);
~FileInfo();
public slots:
void slotFile();
void slotGet();
private:
QLabel *fileNameLabel;
QLineEdit *fileNameLineEdit;
QPushButton *fileBtn;
QLabel *sizeLabel;
QLineEdit *sizeLineEdit;
QLabel *createTimeLabel;
QLineEdit* createTimeLineEdit;
QLabel *lastModifiedLabel;
QLineEdit *lastModifiedLineEdit;
QLabel *lastReadLabel;
QLineEdit *lastReadLineEdit;
QLabel *propertyLabel;
QCheckBox *isDirCheckBox;
QCheckBox *isFileCheckBox;
QCheckBox *isSymLinkCheckBox;
QCheckBox *isHiddenCheckBox;
QCheckBox *isReadableCheckBox;
QCheckBox *isWritableCheckBox;
QCheckBox *isExecutableCheckBox;
QPushButton *getBtn;
};
#endif // FILEINFO_H
#include "fileinfo.h"
FileInfo::FileInfo(QWidget *parent)
: QDialog(parent)
{
fileNameLabel = new QLabel(tr("文件名:"));
fileNameLineEdit = new QLineEdit;
fileBtn = new QPushButton(tr("文件")) ;
sizeLabel = new QLabel( tr("大小:"));
sizeLineEdit = new QLineEdit;
createTimeLabel = new QLabel(tr("创建时间:"));
createTimeLineEdit = new QLineEdit;
lastModifiedLabel = new QLabel(tr("最后修改时间:"));
lastModifiedLineEdit = new QLineEdit;
lastReadLabel = new QLabel(tr("最后访问时间: "));
lastReadLineEdit = new QLineEdit;
propertyLabel = new QLabel(tr("属性:")) ;
isDirCheckBox = new QCheckBox(tr("目录")) ;
isFileCheckBox = new QCheckBox(tr("文件")) ;
isSymLinkCheckBox = new QCheckBox(tr("符号连接")) ;
isHiddenCheckBox = new QCheckBox(tr("隐藏")) ;
isReadableCheckBox = new QCheckBox(tr("读")) ;
isWritableCheckBox = new QCheckBox(tr("写")) ;
isExecutableCheckBox = new QCheckBox(tr("执行")) ;
getBtn = new QPushButton(tr(" 获得文件信息"));
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(fileNameLabel,0,0);
gridLayout->addWidget(fileNameLineEdit,0,1);
gridLayout->addWidget(fileBtn,0,2);
gridLayout->addWidget(sizeLabel,1,0);
gridLayout->addWidget(sizeLineEdit,1,1,1,2);
gridLayout->addWidget(createTimeLabel,2,0);
gridLayout->addWidget(createTimeLineEdit,2,1,1,2);
gridLayout->addWidget(lastModifiedLabel,3,0);
gridLayout->addWidget(lastModifiedLineEdit,3,1,1,2);
gridLayout->addWidget(lastReadLabel,4,0);
gridLayout->addWidget(lastReadLineEdit,4,1,1,2);
QHBoxLayout *layout2 = new QHBoxLayout;
layout2->addWidget(propertyLabel);
layout2->addStretch();
QHBoxLayout *layout3 = new QHBoxLayout;
layout3->addWidget(isDirCheckBox);
layout3->addWidget(isFileCheckBox);
layout3->addWidget(isSymLinkCheckBox);
layout3->addWidget(isHiddenCheckBox);
layout3->addWidget (isReadableCheckBox) ;
layout3->addWidget(isWritableCheckBox);
layout3->addWidget(isExecutableCheckBox);
QHBoxLayout *layout4 = new QHBoxLayout;
layout4->addWidget(getBtn);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addLayout(gridLayout);
mainLayout->addLayout(layout2);
mainLayout->addLayout(layout3);
mainLayout->addLayout(layout4);
connect (fileBtn, SIGNAL (clicked()), this, SLOT (slotFile ()));
connect (getBtn, SIGNAL (clicked()), this, SLOT (slotGet ()));
}
FileInfo::~FileInfo()
{
}
/*槽函数 slotFile()完成通过标准文件对话框获得所需要文件的文件名功能*/
void FileInfo::slotFile ()
{
QString fileName = QFileDialog::getOpenFileName (this," 打开","/", "files(*) ");
fileNameLineEdit->setText(fileName);
}
/*槽函数 slotGet()通过 QFilelnfo 获得具体的文件信息*/
void FileInfo::slotGet()
{
QString file = fileNameLineEdit->text ();
QFileInfo info(file); //根据输入参数创建一个 QFiieinfo 对象
qint64 size = info. size(); //获得 QFileinfo 对象的大小
QDateTime created = info.created(); //获得 QFileinfo 对象的创建时间
QDateTime lastModified = info.lastModified (); //获得 QFileinfo 对象的最后修改时间
QDateTime lastRead = info.lastRead (); ///获得 QFileinfo 对象的最后访问时间
/*判断 QFileinfo 对象的文件类型属性*/
bool isDir = info.isDir(); //是否为目录
bool isFile = info.isFile(); //是否为文件
bool isSymLink = info.isSymLink(); /*判断 QFilelnfo 对象的文件类型属性,此处判断是
否为符号连接。而 symLinkTarget()方法可进一步获得符号连接指向的文件名称。*/
bool isHidden = info.isHidden(); //判断 QFileinfo 对象的隐藏属性
bool isReadable = info.isReadable(); //判断 QFileinfo 对象的读属性
bool isWritable = info.isWritable(); // 判断 QFileinfo 对象的写属性
bool isExecutable = info.isExecutable(); //判断 QFileinfo 对象的可执行属性
/*根据上面得到的结果更新界面显示*/
sizeLineEdit->setText(QString::number(size));
createTimeLineEdit->setText (created.toString ());
lastModifiedLineEdit->setText (lastModified.toString ());
lastReadLineEdit->setText(lastRead. toString());
isDirCheckBox->setCheckState(isDir?Qt::Checked:Qt::Unchecked);
isFileCheckBox->setCheckState(isFile?Qt::Checked:Qt::Unchecked);
isSymLinkCheckBox->setCheckState(isSymLink?Qt::Checked:Qt::Unchecked);
isHiddenCheckBox->setCheckState (isHidden?Qt::Checked:Qt::Unchecked);
isReadableCheckBox->setCheckState(isReadable?Qt::Checked:Qt::Unchecked);
isWritableCheckBox->setCheckState(isWritable?Qt::Checked:Qt::Unchecked);
isExecutableCheckBox->setCheckState(isExecutable?Qt::Checked:Qt::Unchecked);
}
#include "fileinfo.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FileInfo w;
w.show();
return a.exec();
}
Qt5 文件及磁盘处理—— 获取文件信息会在应用程序开发中经常用到的。