基本上,我这样做:
检查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
它适用于所有用户创建的目录,但是对于某些系统目录(Program Files,Windows等)却无法正常工作。怎么了?
答案 0 :(得分:0)
您好,我在这里通过您共享的代码假设您有足够的经验来了解我所做的事情,并且能够根据自己的想法来复制该概念(我并没有完全编写需要看的代码。 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()) ;
}