例子
QString exeDir = qApp->applicationDirPath() + "/packages"; //bin/Debug/debug/packages
QDir dir(exeDir);
QFileInfoList Info_list = dir.entryInfoList(QDir::Files);
在这段代码中,QDir::entryInfoList(QDir::Files)
是 QDir
类的成员函数,用于获取指定目录下的文件信息列表(QFileInfoList
)。
-
首先,我们创建了一个
QDir
对象dir
,表示要获取文件信息的目录。你可以在构造函数中指定目录的路径,或者在之后使用setPath()
方法设置目录路径。 -
然后,我们调用
entryInfoList()
方法,传入QDir::Files
参数,表示我们只希望获取目录中的文件信息,而不包括子目录。 -
entryInfoList()
方法返回一个QFileInfoList
类型的对象Info_list
,其中包含了目录中所有文件的信息。
QFileInfoList
是一个 QList 类型的容器,用于存储 QFileInfo
类的对象,每个 QFileInfo
对象包含了一个文件的相关信息,例如文件名、大小、修改时间等。
在获取到 Info_list
后,你可以使用 foreach
循环或迭代器遍历列表,访问每个文件的信息。例如:
QDir dir("C:/MyFiles"); // 指定目录路径
QFileInfoList Info_list = dir.entryInfoList(QDir::Files); // 获取文件信息列表
// 遍历文件信息列表
foreach (const QFileInfo& fileInfo, Info_list) {
qDebug() << "File Name:" << fileInfo.fileName();
qDebug() << "File Size:" << fileInfo.size() << "bytes";
qDebug() << "Last Modified:" << fileInfo.lastModified().toString();
// 其他文件信息...
}
上述代码将遍历目录 “C:/MyFiles” 下的所有文件,输出每个文件的名称、大小和最后修改时间等信息。
请注意,在实际应用中,你可能需要先判断目录是否存在,以及对可能出现的异常情况进行适当的处理。
相关接口的补充
QFileInfo
类提供了许多接口用于获取文件的各种属性和信息。以下是一些常用的接口:
-
文件路径和名称相关接口:
fileName()
:返回文件名(包含文件后缀)。filePath()
:返回文件路径和文件名(包含文件后缀)。absoluteFilePath()
:返回文件的绝对路径和文件名(包含文件后缀)。baseName()
:返回文件名(不包含文件后缀)。suffix()
:返回文件后缀。
-
文件大小和类型相关接口:
size()
:返回文件大小(字节数)。isFile()
:判断是否是文件。isDir()
:判断是否是目录。isSymLink()
:判断是否是符号链接(软链接)。
-
文件权限和时间相关接口:
isReadable()
:判断文件是否可读。isWritable()
:判断文件是否可写。isExecutable()
:判断文件是否可执行。owner()
:返回文件所有者的用户名。group()
:返回文件所属组的组名。lastModified()
:返回文件的最后修改时间。lastRead()
:返回文件的最后访问时间。
-
文件路径和目录相关接口:
dir()
:返回文件所在的目录。absoluteDir()
:返回文件所在的绝对目录。
在使用这些接口时,需要注意文件是否存在,避免在文件不存在的情况下调用这些接口可能导致的异常。
下面是一个示例代码,展示如何使用一些常用的 QFileInfo
接口:
#include <QFileInfo>
#include <QDebug>
int main()
{
QFileInfo fileInfo("C:/MyFiles/example.txt"); // 指定文件路径
if (fileInfo.exists()) {
qDebug() << "File Name:" << fileInfo.fileName();
qDebug() << "File Path:" << fileInfo.filePath();
qDebug() << "File Absolute Path:" << fileInfo.absoluteFilePath();
qDebug() << "File Base Name:" << fileInfo.baseName();
qDebug() << "File Suffix:" << fileInfo.suffix();
qDebug() << "File Size:" << fileInfo.size() << "bytes";
qDebug() << "Is File:" << fileInfo.isFile();
qDebug() << "Is Directory:" << fileInfo.isDir();
qDebug() << "Is Symbolic Link:" << fileInfo.isSymLink();
qDebug() << "Is Readable:" << fileInfo.isReadable();
qDebug() << "Is Writable:" << fileInfo.isWritable();
qDebug() << "Is Executable:" << fileInfo.isExecutable();
qDebug() << "Owner:" << fileInfo.owner();
qDebug() << "Group:" << fileInfo.group();
qDebug() << "Last Modified:" << fileInfo.lastModified().toString();
qDebug() << "Last Read:" << fileInfo.lastRead().toString();
qDebug() << "File Directory:" << fileInfo.dir().path();
qDebug() << "File Absolute Directory:" << fileInfo.absoluteDir().path();
} else {
qDebug() << "File does not exist.";
}
return 0;
}
在上述示例中,我们创建了一个 QFileInfo
对象 fileInfo
,指定了文件 “C:/MyFiles/example.txt” 的路径。然后,使用不同的接口获取了该文件的各种属性和信息,并进行输出。
参数 补充
entryInfoList()
是 QDir
类的成员函数,用于获取指定目录下的文件信息列表。它可以接受一个可选的 QDir::Filters
参数,用于过滤要获取的文件信息类型。QDir::Filters
是一个位标志枚举,可以使用按位或(|
)运算符将多个选项组合起来。
以下是一些常用的 QDir::Filters
参数:
- QDir::NoFilter:不过滤,获取目录下的所有文件和目录信息(默认值)。
- QDir::Dirs:仅获取目录信息,不包括文件。
- QDir::Files:仅获取文件信息,不包括目录。
- QDir::AllDirs:获取目录及其子目录下的所有目录信息。
- QDir::NoDotAndDotDot:不包括 “.” 和 “…” 目录。
你可以通过按位或运算符组合多个选项。例如,如果你想获取目录下的所有文件和目录信息(包括子目录),可以使用 QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot
。
下面是一个示例代码,展示如何使用 entryInfoList()
函数并指定可选的过滤参数:
#include <QDir>
#include <QFileInfoList>
#include <QDebug>
int main()
{
QDir dir("C:/MyFiles"); // 指定目录路径
QFileInfoList fileInfoList = dir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
// 遍历文件信息列表
foreach (const QFileInfo& fileInfo, fileInfoList) {
if (fileInfo.isFile()) {
qDebug() << "File:" << fileInfo.fileName();
} else if (fileInfo.isDir()) {
qDebug() << "Directory:" << fileInfo.fileName();
}
}
return 0;
}
在上述示例中,我们创建了一个 QDir
对象 dir
,指定了目录路径 “C:/MyFiles”。然后,我们调用 entryInfoList()
函数,并指定了过滤参数 QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot
,以获取目录下的所有文件和目录信息(包括子目录)。最后,通过遍历文件信息列表,我们输出了每个文件和目录的名称。