首页 > 其他分享 >Qt的QFile_Size实现调试

Qt的QFile_Size实现调试

时间:2023-06-19 12:11:06浏览次数:38  
标签:QT STATFS QFile 源码 io Qt Size size

背景

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更绕)

标签:QT,STATFS,QFile,源码,io,Qt,Size,size
From: https://www.cnblogs.com/dayoushen/p/17490831.html

相关文章

  • Qt开发总结1
    GUI界面限制输入的内容QValidator*validator=newQIntValidator(100,999,this);//这样文本框只能输入100~999之间的数字ui->lineEdit->setValidator(validator);显示格式控制ui->textEdit->setWordWrapMode(QTextOption::WrapAnywhere);//任意地方换行ui->tableWi......
  • 在执行建表语句时提示:Row size too large (> 8126)
    在执行建表语句时提示:在mysqld节点下添加以下配置,然后重启mysql[mysqld]innodb_log_file_size=500Minnodb_log_buffer_size=800Minnodb_strict_mode=0 ......
  • PyQt5 扫描远程端口
    #-*-coding:utf-8-*-#@Time:2023/6/916:00#@Author:wangyafeng#@FileName:main.py.py#@Software:PyCharmimportsysfromPyQt5.QtWidgetsimportQApplication,QMainWindowimportscanportimportthreadingimportsocketdefscan_port(ip,port,......
  • /opt/qtcreator-2.6.0/bin/qtcreator
    [root@tomopt]#chmodu+x/home/shikun/Documents/qt-creator-linux-x86-opensource-2.6.0.bin[root@tomopt]#/home/shikun/Documents/qt-creator-linux-x86-opensource-2.6.0.bin[root@tomopt]#lsexer_mineFriendlyARMmini6410Qt4.7qt4.7.tgzqtc......
  • QT的http post
    QT+=network#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>#include<QWidget>#include<QObject>#include<QDebug>#include<QHttpMultiPart>#include<QNetworkAccessManager>#include<QNetworkRe......
  • Qt编写手机版本视频播放器和Onvif工具(可云台和录像)
    一、前言用Qt+ffmpeg写播放器很多人有疑问,为何不用Qt自己的多媒体框架来写,最重要的原因是Qt自带的目前都依赖具体的本地解码器,如果解码器不支持,那就是歇菜的,最多支持个MP4格式,而且在手机上也都是支持本地少部分格式的文件,对于各种视频流完全无能无力。而ffmpeg就不一样了,本身就是......
  • QT基础教程之一创建Qt项目
    QT基础教程1创建Qt项目根据模板创建打开QtCreator界面选择NewProject或者选择菜单栏【文件】-【新建文件或项目】菜单项弹出NewProject对话框,选择QtWidgetsApplication选择【Choose】按钮,弹出如下对话框设置项目名称和路径,按照向导进行下一步向导会默认添加一个继承自CMain......
  • Qt 多语言实现
    简介QtLinguist提供了一套加速应用程序翻译和国际化的工具。Qt使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统。使用QTranslator来加载生成的qm文件,就可以让程序显示指定的语言。//国际化翻译QStringlanguage="CH";//默认为中文,后期可以使......
  • PySide6(Qt for Python) QTableWidget表头边框线问题
    这个问题是在Windows10平台下特有问题。网络上有很多QtC++的解决方案。但是没有特定的PySide6的解决方案(以下是参考的QtC++的解决方案)。链接:https://blog.csdn.net/qq_22642239/article/details/122863344问题描述C++的解决方案是设置纵横表头的样式表:horizontalHeader,v......
  • pyqt5 本来程序是不卡的,但是点多几次后就很卡,原因可能有哪些?
    线程阻塞:如果您的程序执行了一些长时间运行的操作(如网络请求、文件读写等),并且这些操作在主线程中执行,那么它们可能会阻塞用户界面的响应。解决方法是将这些长时间运行的操作放在单独的线程中执行,以确保主线程保持响应。大量计算或循环:如果您的程序包含大量计算密集型的操作或......