繁体   English   中英

QDirIterator跳过文件

[英]QDirIterator skips files

基本上,我这样做:

检查C:\\ Windows目录属性:大小:22.6 GB(24,281,251,244字节),文件:154,028文件

然后,使用以下代码,我尝试获得相同的数字:

inline uint64_t file_size(std::string fname)
{
    std::ifstream ifs(fname, std::ifstream::ate | std::ifstream::binary);
    return ifs.tellg();
}
...
QDirIterator it (path_, QDir::Files | QDir::Hidden | QDir::System , QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
while (it.hasNext())
{
    QFileInfo info(it.next());
    // QFileInfo::size is messed up for *.lnk files, had to improvise
    uint64_t size;
    if (info.isSymLink())
        size = file_size(info.absoluteFilePath().toStdString());
    else
        size = info.size();

    current_sz_desc_.full_size_ += size;
    current_sz_desc_.file_count_ ++;
}

我得到的:21,788,122,091字节,文件:148823

它适用于所有用户创建的目录,但不适用于系统目录(程序文件,Windows等)。 怎么了?

您好,我在这里通过您共享的代码假设您有足够的经验来了解我所做的事情,并且能够根据自己的想法来复制该概念(我没有将完整的代码放到需要看到的地方。http:// doc。 qt.io/qt-5/qstorageinfo.html#bytesTotal | http://doc.qt.io/archives/qt-4.8/qdir.html (请尽可能简单,脚本的复杂度应等于所要求任务的复杂性)此脚本将查找任何目录(包括程序文件系统),但不会查找隐藏目录

int count = 0 ;
QString Root ;

 void MyFunction()
{
    QStorageInfo storage = QStorageInfo::root() ;

    qDebug() << storage.rootPath();
    /*bytes will be only once /1000 not /1000/1000*/
    qDebug() << "size:" << storage.bytesTotal()/1000/1000 << "MB"; 
    qDebug() << "name:" << storage.name();
    qDebug() << "fileSystemType:" << storage.fileSystemType();
    qDebug() << "availableSize:" << storage.bytesAvailable()/1000/1000 << "MB";

    Root = storage.rootPath() ; 

    QDirIterator Load_Path(Root, QDirIterator::Subdirectories) ;

    do
    {
      count = count + 1 ;
      qDebug() << count ; 
    }while(Load_Path.hasNext()) ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM