Qt的QFile_Size实现调试

发布时间 2023-06-19 12:09:10作者: 大有神的自我独白

背景

c++ qt需要获取一系列日志的大小,不想和底层C接口打交道,同时想看看QT的实现,是如何完成的?

源码查看

首先通过qtcreator的帮助知道,QFile::size()是基类QFileDevice::size()实现,

然后找到Qt5.9.7的源码,qtbase\include\QtCore\qfiledevice.h, 索引到src/corelib/io/qfiledevice.h

然后到达src/corelib/io目录,搜索关键字::size(), 可以看到QFileDevice::size(),-> QFSFileEngine::size() -> QFSFileEnginePrivate::nativeSize() -> QFSFileEnginePrivate::doStat(QFileSystemMetaData::SizeAttribute) -> QFileSystemEngine::fillMetaData ->QT_STAT(nativeFilePath, &statBuffer)

->QStorageInfoPrivate::doStat() ->QStorageInfoPrivate::retrievePosixInfo()->EINTR_LOOP(result, QT_STATFS(QFile::encodeName(rootPath).constData(), &statfs_buf))->QT_STATFS -> define QT_STATFS ::statvfs

结论

使用QStorageInfo::bytesTotal,而不是QFile::size,因为QStorageInfo是statsfs,QFile可能是ftell(应该不是,但是QFile更绕)