簡體   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