qt 如何获取磁盘信息、QStorageInfo

以往获取qt磁盘信息,笔者是通过一下API转换的

BOOL GetDiskFreeSpaceExW(
  [in, optional]  LPCWSTR         lpDirectoryName,
  [out, optional] PULARGE_INTEGER lpFreeBytesAvailableToCaller,
  [out, optional] PULARGE_INTEGER lpTotalNumberOfBytes,
  [out, optional] PULARGE_INTEGER lpTotalNumberOfFreeBytes
);

一次偶然的机会发现QT其实已经提供了相关类QStorageInfo

详细说明

QStorageInfo提供有关当前安装的存储和驱动器的信息。

允许检索有关卷的空间挂载点标签文件系统名称的信息。

可以通过将卷挂载点的路径作为构造函数参数传递来创建QStorageInfo的实例,也可以使用setPath()方法进行设置。静态挂载的卷 mountedVolumes()方法可用于获取所有挂载文件系统的列表。QStorageInfo总是缓存检索到的信息,可以调用refresh() 重置QStorageInfo的内部缓存。

以下示例打印有关它的信息。

    QList<QStorageInfo> list; = QStorageInfo::mountedVolumes();
    for(auto var:list)
    {
        qDebug()<<"blockSize"<<":"<<var.blockSize();
        qDebug()<<"bytesAvailable"<<":"<<var.bytesAvailable()/1024/1024/1024<<"GB";
        qDebug()<<"bytesFree"<<":"<<var.bytesFree()/1024/1024/1024<<"GB";
        qDebug()<<"bytesTotal"<<":"<<var.bytesTotal()/1024/1024/1024<<"GB";
        qDebug()<<"device"<<":"<<var.device();
        qDebug()<<"displayName"<<":"<<var.displayName();
        qDebug()<<"fileSystemType"<<":"<<var.fileSystemType();
        qDebug()<<"isReadOnly"<<":"<<var.isReadOnly();
        qDebug()<<"isRoot"<<":"<<var.isRoot();
        qDebug()<<"isValid"<<":"<<var.isValid();
        qDebug()<<"name"<<":"<<var.name();
        qDebug()<<"rootPath"<<":"<<var.rootPath();
        qDebug()<<"*****************************";
    }

 打印结果

blockSize : -1
bytesAvailable : 68 GB
bytesFree : 68 GB
bytesTotal : 146 GB
device : "\\\\?\\Volume{8406cabc-3eaa-4755-a85f-d9e977711c05}\\"
displayName : "Windows"
fileSystemType : "NTFS"
isReadOnly : false
isRoot : true
isValid : true
name : "Windows"
rootPath : "C:/"
*****************************
blockSize : -1
bytesAvailable : 209 GB
bytesFree : 209 GB
bytesTotal : 329 GB
device : "\\\\?\\Volume{84025fc9-a85f-445f-b128-36e702af5a5c}\\"
displayName : "Data"
fileSystemType : "NTFS"
isReadOnly : false
isRoot : false
isValid : true
name : "Data"
rootPath : "D:/"
*****************************

成员函数

QStorageInfo::QStorageInfo()

使用默认构造函数创建的对象将无效,因此无法使用。

See also setPath(), isReady(), and isValid().

QStorageInfo::QStorageInfo(const QString &path)

 构造一个新的QStorageInfo对象,该对象提供有关安装在路径上的卷的信息。

如果传递目录文件,QStorageInfo对象将引用此目录或文件所在的卷。您可以使用isValid()方法检查创建的对象是否正确。

以下示例显示了如何获取应用程序所在的卷。建议始终检查卷是否已准备好且有效。

QStorageInfo var(qApp->applicationDirPath());
     if (var.isValid() && var.isReady()) {
         qDebug()<<"blockSize"<<":"<<var.blockSize();
         qDebug()<<"bytesAvailable"<<":"<<var.bytesAvailable()/1024/1024/1024<<"GB";
         qDebug()<<"bytesFree"<<":"<<var.bytesFree()/1024/1024/1024<<"GB";
         qDebug()<<"bytesTotal"<<":"<<var.bytesTotal()/1024/1024/1024<<"GB";
         qDebug()<<"device"<<":"<<var.device();
         qDebug()<<"displayName"<<":"<<var.displayName();
         qDebug()<<"fileSystemType"<<":"<<var.fileSystemType();
         qDebug()<<"isReadOnly"<<":"<<var.isReadOnly();
         qDebug()<<"isRoot"<<":"<<var.isRoot();
         qDebug()<<"isValid"<<":"<<var.isValid();
         qDebug()<<"name"<<":"<<var.name();
         qDebug()<<"rootPath"<<":"<<var.rootPath();
     }

打印结果

blockSize : -1
bytesAvailable : 209 GB
bytesFree : 209 GB
bytesTotal : 329 GB
device : "\\\\?\\Volume{84025fc9-a85f-445f-b128-36e702af5a5c}\\"
displayName : "Data"
fileSystemType : "NTFS"
isReadOnly : false
isRoot : false
isValid : true
name : "Data"
rootPath : "D:/"

See also setPath(). 

QStorageInfo::QStorageInfo(const QDir &dir)

构造一个新的QStorageInfo对象,该对象提供有关包含dir文件夹的卷的信息。 

QStorageInfo::QStorageInfo(const QStorageInfo &other)

 构造一个新的QStorageInfo对象,该对象是另一个QStorageInfo对象的副本。

QStorageInfo::~QStorageInfo()

销毁QStorageInfo对象并释放其资源。 

int QStorageInfo::blockSize() const

返回此文件系统的最佳传输块大小。 

如果QStorageInfo无法确定大小或QStorageInfo对象无效,则返回-1。

qint64 QStorageInfo::bytesAvailable() const

返回当前用户可用的大小(以字节为单位)。如果用户是root用户或系统管理员,它返回可用的总大小。

此大小可以小于或等于bytesFree()函数返回的空闲大小。

如果QStorageInfo对象无效,则返回-1。 

See also bytesTotal() and bytesFree().

qint64 QStorageInfo::bytesFree() const

返回卷中的可用字节数。请注意,如果文件系统上有配额,则此值可以大于 bytesAvailable()返回的值。 

See also bytesTotal() and bytesAvailable().

qint64 QStorageInfo::bytesTotal() const

返回总体积大小(以字节为单位)。 

See also bytesFree() and bytesAvailable().

QByteArray QStorageInfo::device() const

返回此卷的设备。 

例如,在Unix文件系统(包括macOS)上,它返回本地存储的开发路径,如/dev/sda0。在Windows上,它返回本地存储的以\\\\?\\开头的UNC路径(换句话说,卷GUID)。

See also rootPath() 

QString QStorageInfo::displayName() const

如果可用,则返回卷的名称,如果不可用,则返回根路径。 

QByteArray QStorageInfo::fileSystemType() const

返回文件系统的类型名称。

这是一个依赖于平台的函数,文件系统名称可能因不同的操作系统而异。例如,在Windows文件系统上,它们可以命名为NTFS,Linux它们可以命名为ntfs-3gfuseblk。 

 See also name(). 

bool QStorageInfo::isReadOnly() const

如果当前文件系统受到写入保护,则返回true;否则为假。 

bool QStorageInfo::isReady() const

如果当前文件系统已准备好工作,则返回true;否则为假。例如,如果未插入CD卷,则返回false。

请注意,fileSystemType()、name()、bytesTotal()、bytesFree()和bytesAvailable() 将返回无效数据,直到卷准备就绪。 

See also isValid()

bool QStorageInfo::isRoot() const

如果此QStorageInfo代表系统根卷,则返回true;否则为假。 

在Unix文件系统上,根卷是安装在/上的卷。在Windows上,根卷是安装操作系统的卷。

See also root().

bool QStorageInfo::isValid() const

如果rootPath指定的QStorageInfo存在并正确挂载,则返回true。 

See also isReady().

QList<QStorageInfo> QStorageInfo::mountedVolumes()

返回与当前挂载文件系统列表对应的QStorageInfo对象列表。 

 在Windows上,这会返回My Computer文件夹中可见的驱动器。在Unix操作系统上,它返回所有挂载文件系统的列表(伪文件系统除外)。

默认返回所有当前挂载的文件系统。

该示例显示了如何检索所有可用文件系统,跳过只读文件系统。

foreach (const QStorageInfo &var, QStorageInfo::mountedVolumes()) {
            if (var.isValid() && var.isReady()) {
                if (!var.isReadOnly()) {
                    qDebug()<<"blockSize"<<":"<<var.blockSize();
                    qDebug()<<"bytesAvailable"<<":"<<var.bytesAvailable()/1024/1024/1024<<"GB";
                    qDebug()<<"bytesFree"<<":"<<var.bytesFree()/1024/1024/1024<<"GB";
                    qDebug()<<"bytesTotal"<<":"<<var.bytesTotal()/1024/1024/1024<<"GB";
                    qDebug()<<"device"<<":"<<var.device();
                    qDebug()<<"displayName"<<":"<<var.displayName();
                    qDebug()<<"fileSystemType"<<":"<<var.fileSystemType();
                    qDebug()<<"isReadOnly"<<":"<<var.isReadOnly();
                    qDebug()<<"isRoot"<<":"<<var.isRoot();
                    qDebug()<<"isValid"<<":"<<var.isValid();
                    qDebug()<<"name"<<":"<<var.name();
                    qDebug()<<"rootPath"<<":"<<var.rootPath();
                }
            }
        }

打印结果

blockSize : -1
bytesAvailable : 68 GB
bytesFree : 68 GB
bytesTotal : 146 GB
device : "\\\\?\\Volume{8406cabc-3eaa-4755-a85f-d9e977711c05}\\"
displayName : "Windows"
fileSystemType : "NTFS"
isReadOnly : false
isRoot : true
isValid : true
name : "Windows"
rootPath : "C:/"
blockSize : -1
bytesAvailable : 209 GB
bytesFree : 209 GB
bytesTotal : 329 GB
device : "\\\\?\\Volume{84025fc9-a85f-445f-b128-36e702af5a5c}\\"
displayName : "Data"
fileSystemType : "NTFS"
isReadOnly : false
isRoot : false
isValid : true
name : "Data"
rootPath : "D:/"

 See also root().

QString QStorageInfo::name() const

返回文件系统的人类可读名称,通常称为label。 

并非所有文件系统都支持此功能。在这种情况下,此方法返回的值可能为空。如果文件系统不支持标签,或者没有设置标签,则返回一个空字符串。

在Linux,检索卷的标签需要udev出现在系统中。

See also fileSystemType().

void QStorageInfo::refresh()

 重置QStorageInfo的内部缓存。

QStorageInfo缓存有关存储的信息以提高性能。QStorageInfo在对象构造期间和/或调用setPath()方法时检索信息。您必须通过调用此函数来手动重置缓存以更新存储信息。

QStorageInfo QStorageInfo::root()

返回一个QStorageInfo对象,该对象表示系统根卷。 

在Unix系统上,此调用返回根 ('/') 卷;在Windows中,则返回安装操作系统的卷。

See also isRoot(). 

QString QStorageInfo::rootPath() const

返回此QStorageInfo对象表示的文件系统的挂载点。 

在Windows上,如果卷未挂载到目录,它会返回卷号。

请注意,rootPath()返回的值是一个卷的真正挂载点,可能不等于传递给构造函数或setPath()方法的值。例如,如果您在系统中只有根卷,并将'/directory'传递给setPath(),则此方法将返回'/'。

See also setPath() and device().

void QStorageInfo::setPath(const QString &path)

将此QStorageInfo对象设置为安装在path所在位置的文件系统。 

path可以是文件系统的根路径目录或该文件系统中的文件

See also rootPath().

void QStorageInfo::swap(QStorageInfo &other)

将此卷信息与其他卷信息交换。此功能非常快,永远不会失败。

QStorageInfo &QStorageInfo::operator=(const QStorageInfo &other)

 制作QStorageInfo对象的副本并将其分配给此QStorageInfo对象。

QStorageInfo &QStorageInfo::operator=(QStorageInfo &&other)

 将其他分配给此QStorageInfo实例。

 相关非成员函数

bool operator!=(const QStorageInfo &first, const QStorageInfo &second)

如果第一个QStorageInfo对象引用的驱动器或卷与第二个不同,则返回true;否则返回false

bool operator==(const QStorageInfo &first, const QStorageInfo &second)

如果第一个QStorageInfo对象引用与第二个相同的驱动器或卷,则返回true;否则返回false。 

请注意,比较两个无效的QStorageInfo对象的结果始终为正。 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/740524.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

26届软件工程生大二末的学期总结

一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 要不断的、反复的&#xff0c;爱上这个普通的自己。 本文简介&#xff1a;本人是大二软件工程专业&#xff0c;大二即将结束步入大三&#xff0c;这篇文章作为我的个人小笔记&#xff0c;只想在这里记录当下的心情与学习…

你如何看待市场波动性的?

实际上&#xff0c;波动性并不总是负面的&#xff0c;它有时也孕育着快速获利的机会。 对于长期投资者而言&#xff0c;市场波动&#xff08;尤其与熊市相伴时&#xff09;往往是一个优势。它允许投资者拓展并多样化投资组合&#xff0c;以较低的价格购入投资工具&#xff0c;…

JAVA NIO(二) Buffer和Channel

一&#xff0c;基本使用 1&#xff0c; 一个Socket连接使用一个Channel来表示&#xff0c;以前直接操作Socket文件描述符来对读写缓冲区操作&#xff0c;比如读数据到用户空间的一个byte数组&#xff0c;NIO中Channel对这个过程作了封装&#xff0c;其中用户空间的byte数组就类…

6. Revit API UI: PreviewControl(预览控件)

6. Revit API UI: PreviewControl&#xff08;预览&#xff09; PreviewControl 有时我们需要一个预览功能&#xff0c;而Revit也提供了一个PreviewControl类来帮助我们实现这个功能。 从类的继承关系来看&#xff0c;PreviewControl就是一个用户自定义控件&#xff0c;它就…

vue3滚动日历选择器

倒叙日历&#xff1a; <template><div class"date-picker"><div class"column" wheel"onYearScroll"><div v-for"(year, index) in displayedYears" :key"index" :class"{current: year current…

Vue和React总结

数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作 (5)虚拟dom 不再使用原生的dom操作节点,极大解放dom操作,但具体操作的还是dom不过是换了另一种方式 (6)各种指令;过滤器 v-text主要用来更新textContent&#xff0c;可以等同于JS的text属性。 v-…

学习金字塔模型

学习金字塔模型由美国缅因州巴特尔教育研究所&#xff08;National Training Laboratories, Bethel, Maine&#xff09;开发&#xff0c;它展示了不同学习活动的平均知识保留率。这种方法可以帮助人们理解不同学习方式的有效性&#xff0c;从而更好地选择适合的学习方法。学习金…

el-dialog el-select适配移动端

一、el-dialog 2024.06.20今天我学习了如何对el-dialog弹窗适配移动端展示&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; media screen and (min-width: 220px) and (max-width: 600px) {::v-deep .el-dialog {width: 95% !important;} } 二、el-select 代码如下…

Linux调试器 gdb

gbd基本概念 GDB (GNU Debugger) 是一个强大的命令行调试工具,用于调试各种编程语言(如C、C、Java、Python等)编写的程序。使用 gdb可以帮助开发人员更快地定位和修复程序中的缺陷,提高代码质量和开发效率。它是 Linux/Unix 系统上最常用的调试工具之一。 1. 背景 程序的发布方…

数据挖掘常见算法(聚类)

划分方法 K-均值算法(K-means算法) 方法: 首先选择K个随机的点,称为聚类中心.对于数据集中的,每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类.计算每一个组的平均值,将改组所关联的中心点移动到平均值的位置重复2~…

泰迪智能科技与成都文理学院人工智能与大数据学院开展校企合作交流

近日&#xff0c;在推动高等教育与产业深度融合的背景下&#xff0c;成都文理学院人工智能与大数据学院携手广东泰迪智能科技股份有限公司开展“专业建设交流会”。人工智能与大数据学院院长胡念青、院长助理陈坚、骨干教师刘超超、孙沛、赵杰、文运、胡斌、邹杰出席本次交流会…

北邮《计算机网络》传输层笔记

内容一览 缩写复习单词复习传输层前言传输协议的要点拥塞控制UDPTCP VS UDPTCP 缩写复习 AIMD XCP ECN WFQ max-min-fair ARQ PAWS TSAP NSAP TCP UDP RTT SCTP SACK NAK RST MSS 单词复习 inverse multiplexing(SCTP) convergence crashed machine protocol scenarios asym…

外贸行业 - 收汇日期

“收汇日期”指的是外贸业务中&#xff0c;出口方从进口方收到货款的具体日期。在外贸交易中&#xff0c;特别是使用信用证&#xff08;Letter of Credit, L/C&#xff09;、电汇&#xff08;Telegraphic Transfer, T/T&#xff09;、付款交单&#xff08;Documents against Pa…

“移”起AI+丨首创AI值守无人小店!中国移动视觉大模型加速落地

在城市里开设一家24小时便利店有多难&#xff1f;创业者常常面临着熬夜看店、全年无休的困境&#xff0c;而选择增加雇佣员工看店又会面临着成本高昂、利润微薄的问题。 日前在温州&#xff0c;一家AI无人值守便利店引发关注。在这家无人便利小店内&#xff0c;浙江移动试点部…

C++STL梳理

CSTL标准手册&#xff1a; https://cplusplus.com/reference/stl/ https://cplusplus.com/reference/vector/vector/at/ 1、STL基础 1.1、STL基本组成(6大组件13个头文件) 通常认为&#xff0c;STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成&…

Tomcat多实例配置

目录 一. 复制程序文件 二. 启动tomcat多实例 三. Tomcat多实例负载均衡 多实例&#xff08;多进程&#xff09;&#xff1a;同一个程序启动多次&#xff0c;分为两种情况: 第一种&#xff1a;一台机器跑多个站点&#xff1b; 第二种&#xff1a;一个机器跑一个站点多个实…

基于Java家庭理财系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

ardupilot开发 --- 视觉伺服 篇

风驰电掣云端飘&#xff0c;相机无法对上焦 视觉伺服分类视觉伺服中的坐标系成像模型推导IBVS推导参考文献 视觉伺服分类 控制量是在图像空间中推导得到还是在欧式空间中推导得到&#xff0c;视觉伺服又可以分类为基于位置(PBVS)和基于图像的(IBVS)视觉伺服。 视觉伺服中的坐…

算法设计与分析:并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想 1. 基准算法 1.1 算法思想 1.2 代码 1.3 时间复杂度 2. 使用并查集的高效算法 2.1 算法思想 2.2 代码&#xff1a; 2.3 时间复杂度&#xff1a; 五、实验结果 一、实验目的 1. 掌握图的连通性。 2. 掌…

MySQL数据库初体验+数据库管理(其一)

【1】 操作系统介绍&#xff1a; Linux操作系统有 RedHat CentOS Debian Ubuntu OpenSUSE 信创标准 国产系统 &#xff1a; 华为&#xff08;欧拉&#xff09; 阿里&#xff08;龙蜥&#xff09; 腾讯 &#xff08;tencentOS&#xff09; 麒麟&#xf…