1. 程式人生 > >Qt學習之路之獲取檔案資訊

Qt學習之路之獲取檔案資訊

QFileInfo類提供了對檔案進行操作時獲取的檔案資訊,包括檔名, 檔案大小(位元組), 檔案建立時間,

檔案最後修改時間,檔案最近訪問時間以及一些檔案是否為目錄,檔案,或者符號連線,和讀寫等屬性。

不廢話了,先看看程式碼~~~~

fileInfo_widget.h

#ifndef FILEWIDGET_H
#define FILEWIDGET_H

#include <QWidget>
#include <QLabel>
#include <QTextCodec>	//---j解決中文亂碼
#include <QPushButton>
#include <QCheckBox>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QGridLayout>
#include <QDateTime>

class FileInfoWidget : public QWidget
{
	Q_OBJECT
public:
	FileInfoWidget(QWidget *parent=0);
	 
	public slots:
		void slotFile();		//-----通過標準檔案對話方塊獲取檔名功能
		void slotGetInfo();	//-----獲取檔案的具體資訊
private:
	QLabel *fileNameLabel;
	QLineEdit *fileNameEdit;
	QPushButton *openFileBtn;
	QPushButton *GetFileInfoBtn;

	QLabel *sizeLabel;							//---大小
	QLineEdit *sizeLabelEdit;

	QLabel *buildTimeLabel;					//--建立時間
	QLineEdit *buildTimeEdit;

	QLabel *lastModifiedTimeLabel;		//---最近修改時間
	QLineEdit *lastModifiedEdit;

	QLabel *lastVisitLabel;					//--最後訪問時間
	QLineEdit *lastVisitEidt;

	QLabel *propertyLabel;						//--屬性
	QCheckBox *isDirCheckBox;				//--目錄
	QCheckBox *isFileCheckBox;				//--檔案
	QCheckBox *isSymbolLinkCheckBox;	//--符號連線
	QCheckBox *isHiddenCheckBox;			//--隱藏
	QCheckBox *isReadableCheckBox;		//--讀
	QCheckBox *isWriteableCheckBox;		//--寫
	QCheckBox *isExecutableCheckBox;		//-執行
};

#endif	//FILEWIDGET_H
fileInfo_widget.cpp
#include "fileInfo_widget.h"

FileInfoWidget::FileInfoWidget(QWidget *parent/*=0*/):QWidget(parent)
{
	//----Qt5解決中文亂碼
	QTextCodec *codec = QTextCodec::codecForName("GB18030");

	//-----------------------------------
	fileNameLabel = new QLabel(codec->toUnicode("檔名"));
	fileNameEdit = new QLineEdit();
	openFileBtn = new QPushButton(codec->toUnicode("檔案"));

	sizeLabel = new QLabel(codec->toUnicode("大小"));
	sizeLabelEdit = new QLineEdit();

	buildTimeLabel = new QLabel(codec->toUnicode("建立時間"));
	buildTimeEdit = new QLineEdit();

	lastModifiedTimeLabel = new QLabel(codec->toUnicode("最後修改時間"));
	lastModifiedEdit = new QLineEdit();

	lastVisitLabel = new QLabel(codec->toUnicode("最近訪問時間"));
	lastVisitEidt = new QLineEdit();

	propertyLabel = new QLabel(codec->toUnicode("屬性"));

	isDirCheckBox = new QCheckBox(codec->toUnicode("目錄"));
	isFileCheckBox = new QCheckBox(codec->toUnicode("檔案"));
	isSymbolLinkCheckBox = new QCheckBox(codec->toUnicode("符號連線"));
	isHiddenCheckBox = new QCheckBox(codec->toUnicode("隱藏"));
	isReadableCheckBox = new QCheckBox(codec->toUnicode("讀"));
	isWriteableCheckBox = new QCheckBox(codec->toUnicode("寫"));
	isExecutableCheckBox = new QCheckBox(codec->toUnicode("執行"));

	GetFileInfoBtn = new QPushButton(codec->toUnicode("獲取檔案資訊"));

	//------佈局控制元件
	QGridLayout *gridLayout = new QGridLayout();
	gridLayout->addWidget(fileNameLabel, 0, 0);
	gridLayout->addWidget(fileNameEdit, 0, 1);
	gridLayout->addWidget(openFileBtn, 0, 2);

	gridLayout->addWidget(sizeLabel, 1, 0);
	gridLayout->addWidget(sizeLabelEdit, 1, 1, 1, 2);

	gridLayout->addWidget(buildTimeLabel,  2, 0);
	gridLayout->addWidget(buildTimeEdit, 2, 1, 1, 2);

	gridLayout->addWidget(lastVisitLabel, 3, 0);
	gridLayout->addWidget(lastVisitEidt, 3, 1, 1, 2);

	gridLayout->addWidget(lastVisitLabel, 4, 0);
	gridLayout->addWidget(lastVisitEidt, 4, 1, 1, 2);

	QHBoxLayout *hLayout1 = new QHBoxLayout();
	hLayout1->addWidget(propertyLabel);
	hLayout1->addStretch();

	QHBoxLayout *hLayout2 = new QHBoxLayout();
	hLayout2->addWidget(isDirCheckBox);
	hLayout2->addWidget(isFileCheckBox);
	hLayout2->addWidget(isHiddenCheckBox);
	hLayout2->addWidget(isSymbolLinkCheckBox);
	hLayout2->addWidget(isReadableCheckBox);
	hLayout2->addWidget(isWriteableCheckBox);
	hLayout2->addWidget(isExecutableCheckBox);

	QHBoxLayout *hLayout3 = new QHBoxLayout();
	hLayout3->addWidget(GetFileInfoBtn);

	QVBoxLayout *vLayout = new QVBoxLayout(this);
	vLayout->addLayout(gridLayout);
	vLayout->addLayout(hLayout1);
	vLayout->addLayout(hLayout2);
	vLayout->addLayout(hLayout3);

	//---顯示佈局
	setLayout(vLayout);

	//-----設定訊號與槽
	connect(openFileBtn, SIGNAL(clicked()), this, SLOT(slotFile()));
	connect(GetFileInfoBtn, SIGNAL(clicked()), this, SLOT(slotGetInfo()));

	//----設定視窗屬性
	setWindowTitle(codec->toUnicode("檔案資訊"));
}

//-----通過標準檔案對話方塊獲取檔名功能
void FileInfoWidget::slotFile()
{
	//----Qt5解決中文亂碼
	QTextCodec *codec = QTextCodec::codecForName("GB18030");

	QString fileNameStr = QFileDialog :: getOpenFileName	(this);
	fileNameEdit->setText(fileNameStr);
}

//-----獲取檔案的具體資訊
void FileInfoWidget::slotGetInfo()
{
	//----Qt5解決中文亂碼
	QTextCodec *codec = QTextCodec::codecForName("GB18030");

	//---獲取檔名
	QString fileStr = fileNameEdit->text();

	QFileInfo fileInfo(fileStr);
	//---獲取檔案大小(位元組)
	qint64 size = fileInfo.size();
	//--獲取檔案建立時間
	QDateTime buildTime = fileInfo.created();
	//--獲取檔案最近修改時間
	QDateTime lastMdTime = fileInfo.lastModified();
	//---獲取檔案最近訪問時間
	QDateTime lastVisitTime = fileInfo.lastRead();

	//--獲取檔案相關屬性
	bool isDir = fileInfo.isDir();
	bool isFile = fileInfo.isFile();
	bool isSymLink = fileInfo.isSymLink();
	bool isHide = fileInfo.isHidden();
	bool isRead = fileInfo.isReadable();
	bool isWrite = fileInfo.isWritable();
	bool isExecu = fileInfo.isExecutable();

	//--顯示屬性
	sizeLabelEdit->setText(QString :: number(size) + codec->toUnicode(" 位元組"));
	buildTimeEdit->setText(buildTime.toString());
	lastModifiedEdit->setText(lastMdTime.toString());
	lastVisitEidt->setText(lastVisitTime.toString());
	
	isDirCheckBox->setCheckState(isDir ? Qt::Checked : Qt :: Unchecked);
	isFileCheckBox->setCheckState(isFile ? Qt::Checked : Qt :: Unchecked);
	isSymbolLinkCheckBox->setCheckState(isSymLink ? Qt::Checked : Qt :: Unchecked);
	isHiddenCheckBox->setCheckState(isHide ? Qt::Checked : Qt :: Unchecked);
	isReadableCheckBox->setCheckState(isRead ? Qt::Checked : Qt :: Unchecked);
	isWriteableCheckBox->setCheckState(isWrite ? Qt::Checked : Qt :: Unchecked);
	isExecutableCheckBox->setCheckState(isExecu ? Qt::Checked : Qt :: Unchecked);
}
</span></strong>
main.cpp
#pragma once
#include <QtWidgets/QApplication>
#include "fileInfo_widget.h"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	FileInfoWidget win;
	win.show();

	return a.exec();
}

執行結果:

更多關於QFileInfo類的使用,請參考assistant。