前言:
最近用qt做usb驱动相关任务,需要一个能访问文件系统的程序,它要遍历给定目录下的所有内容,并按结构安排显示出目录与文件。
QFileInfoList getDir(QString path)
{
QDir dir(path);
QFileInfoList file_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);//文件夹和文件
QFileInfoList folder_list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); //只有文件夹
if((folder_list.size()==0)&&(file_list.size()!=0)){//目录下不存在文件夹,只存在文件的情况:不递归,只显示;
for(int j=0;j!=file_list.size();j++){
QFileInfo fileInfo = file_list.at(j);
std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10).arg(fileInfo.fileName()).arg(fileInfo.absoluteFilePath()) );
std::cout << std::endl;
}
std::cout <<"***************************"<< std::endl;
}
for(int i = 0; i != folder_list.size(); i++)//对目录进行递归
{
if(i==0){ //在第一次进入目录时,显示目录下的 文件 与 文件夹
for(int j=0;j!=file_list.size();j++){
QFileInfo fileInfo = file_list.at(j);
std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo.size(), 10).arg(fileInfo.fileName()).arg(fileInfo.absoluteFilePath()) );
std::cout << std::endl;
}
for(int k=0;k!=folder_list.size();k++){
QFileInfo fileInfo111 = folder_list.at(k);
std::cout << qPrintable(QString("%1 %2 %3").arg(fileInfo111.size(), 10).arg(fileInfo111.fileName()).arg(fileInfo111.absoluteFilePath()) );
std::cout << std::endl;
}
std::cout <<"***************************"<< std::endl;
}
//显示后再开始递归该目录
QString name = folder_list.at(i).absoluteFilePath();
QFileInfoList child_file_list = getDir(name);
file_list.append(child_file_list);
}
return file_list;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString path="指定目录";
getDir(path);
return a.exec();
}
后续:
QT提供了QFileSystemModel
方法,一般情况下不需要自己去遍历文件系统做显示,直接调用该方法即可;
[ QFileSystemModel使用方法 ]