qlonglong imageSpace(const QString &path){ QDir dir(path); qlonglong size=0; QStringList filters; foreach(QByteArray format,QImageReader::supportedImageFormats()) filters+="."+format; cout<<"<"<<path.toStdString()<<">"<<endl; foreach(QString file,dir.entryList(filters,QDir::Files)) { qlonglong incSize=QFileInfo(dir,file).size(); cout<<"\t"<<file.toStdString()<<"\t"<<incSize<<endl; size+=incSize; } foreach(QString subDir,dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)){ size+=imageSpace(path+QDir::separator()+subDir); } return size;}
我们从给定的路径创建一个QDir对象开始,这个给定路径可能与当前目录或者绝对地址有关系我们传递给entrylist()函数两个参数第一个参数是文件名过滤器的一个列表,它们可以包含“”和“?”这类的通配符在这个实例中,将只选出含有Qlmage可以读取的文件格式第二个参数指定所要的条目类型(普通文件、目录、驱动器等)我们遇历这个文件列表,把它们的大小累加起来QFileInfo类可以访问文件的属性,如文件的大小、权限、属主和时间戳,等等第二个entryList()调用获得这个目录下所有子目录(不包括.和..)我们遍历它们且并递归调用imageSpace()以累计图片文件的大小为了创建每一个子目录的路径,我们把当前目录的路径和子目录名称组合起来,然后用斜线把它们分隔开QDir在所有平台上都把“\"认作是目录分隔符在把路径呈现给用户的时候,可以调用QDir::convertSeparators(),这个静态函数把斜线转换为针对具体平台的正确的分隔符下面在main()函数中调用这个函数,int main(int argc, char argv[]){ QCoreApplication a(argc, argv); QStringList args=QCoreApplication::arguments(); QString path=QDir::currentPath(); if(args.count()>1) path=args[1]; cout<<"Space used by images in "<<qPrintable(path) <<" and its subdirectories is " <<(imageSpace(path)/1024)<<" KB"<<endl; return 0;}
我们使用QDir::currentPath()将路径初始化为当前目录作为备用选择,也可以使用QDir::homePath(),将它初始化为用户的主目录如果用户在命令行中指定了一个路径,就使用它来替代前面的目录最后,调用imageSpace()函数来计算所有图片总共占用了多少空间——————————————————对于本文实例完整代码有需要的朋友,可关注并在评论区留言(图片来源网络,侵删)
0 评论