qt 如何获取磁盘信息、QStorageInfo

news2024/11/28 12:31:50

以往获取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对象的结果始终为正。 

  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

10地!2024年一级造价师报名通知发布!

各位考生注意&#xff0c;西藏、四川、江西、新疆&#xff0c;辽宁、江苏、云南、新疆兵团、海南10个地区已经发布了关于2024年度一级造价工程师职业资格考试报名工作的通知&#xff1a; 浙江 辽宁 江苏 云南 报名时间&#xff1a;6月28日9:00—7月8日17:00&#xff1b; 缴费时…

spacetitanic 使用决策树分类

Spaceship Titanic | Kagglehttps://www.kaggle.com/competitions/spaceship-titanic 导入数据分析及调用接口所需库 读取csv文件数据并使用.head()查看头部信息 描述数据&#xff0c;使用.info()函数获取对象的详细信息 通过.describe()方法会生成一个统计摘要&#xff0c;并…

Linux 之内存管理 -free 和 RSS/RES的意义

一、free -h 计算关系&#xff1a; available free buff/cache total used availbleshared 参数 说明 total 总计物理内存的大小 used 已使用的物理内存的大小 free 可用物理内存有多少 shared 多个进程共享的内存总额 buff/cache 写入和读取 磁盘内存缓冲区的大小 avail…

SRM供应商管理系统是什么?企业为何都非常重视供应商管理?

企业与供应商之间的关系就像一张错综复杂的网&#xff0c;维系着生产的顺利进行。但是&#xff0c;这张网也时常让企业感到焦虑和困扰。例如&#xff0c; 如何准确地评估供应商的信誉和实力&#xff1f; 如何高效地与众多供应商沟通&#xff0c;确保信息的及时传递和反馈&…

MySQL进阶——视图

目录 1基本语法 1.1创建 1.2 查询 1.3 修改 1.4 删除 2 检查选项 2.1 级联CASCADED 2.2本地LOCAL 3 更新及作用 3.1视图的更新条件 3.2视图的作用 4视图案例 1基本语法 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&…

【linux】dup文件描述符复制函数和管道详解

目录 一、文件描述符复制 1、dup函数&#xff08;复制文件描述符&#xff09; ​编辑 2、dup2函数&#xff08;复制文件描述符&#xff09; ​编辑 二、无名管道pipe 1、概述 2、无名管道的创建 3、无名管道读写的特点 4、无名管道ps -A | grep bash实现 三、有名管道FI…

下载caj viewer查看caj论文

前言 CAJ是“中国学术期刊全文数据库”&#xff08;China Academic Journals&#xff09;的英文缩写&#xff0c;同时也是“中国学术期刊全文数据库”中的一种文件格式。我们从CNKI&#xff08;中国知网&#xff09;下载的资料一般都是这种文件格式。 CAJ不同于PDF等&#xff…

Kimi还能对学术论文进行润色?我来教你!

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 一、引言 在学术界&#xff0c;论文的质量往往决定了研究的可信度和影响力。Kimi作为一款人工智能助手&#xff0c;可以为学术论文的润色提供有效的帮助。本文将详细介绍如何利用Kimi进…

面向对象进阶--抽象(Java 抽象)详解

1.1 抽象类引入 父类中的方法&#xff0c;被它的子类们重写&#xff0c;子类各自的实现都不尽相同。那么父类的方法声明和方法主体&#xff0c;只有声明还有意义&#xff0c;而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说&#xff0c;父类可能知道…

复盘最近的面试

这个礼拜一直在面试&#xff0c;想着看看能否拿到不错的offer前去实习&#xff0c;从周一到周四&#xff0c;面了将近10家&#xff0c;特整理此份面经&#xff0c;希望对秋招的各位有所帮助 A公司 一面 面试官人很好&#xff0c;我回答的时候不会他会笑笑然后提醒我 自我介绍~…

VMware安装及创建虚拟机

安装完成后&#xff0c;点击创建新的虚拟机 操作完成后就安装成功啦 &#xff0c;下个教程出虚拟机Linux和xshell的连接及可能出现的问题解决方案

Elasticsearch:倒数排序融合 - Reciprocal rank fusion - 8.14

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。语法可能会在正式发布之前发生变化。Elastic 将努力修复任何问题&#xff0c;但技术预览中的功能不受官方正式发布功能的支持 SLA 约束。 倒数排序融合 (reciprocal rank fusion - RRF) 是一…

QTday5 2024-06-19

作业要求&#xff1a; 1.思维导图 2.整理代码&#xff1a;TCP服务器 作业1&#xff1a;思维导图 作业2&#xff1a;整理代码 运行代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QList>…

力扣-最长连续序列

文章目录 题目题解解释代码 题目 原题链接&#xff1a;最长连续序列 题解 思路&#xff1a; 定义变量 res 用来记录最长连续序列的长度。对集合中的每个元素进行如下处理&#xff1a; 检查该元素是否是某个连续序列的起点&#xff08;即 num - 1 不在集合中&#xff09;。如…

90 岁老人靠一辆自行车年赚 170 亿,捷安特如何打造山地车极致产品力?

一位富家小开在中年时经商失败&#xff0c;38岁时从零开始创业&#xff0c;最终在自行车整车市场占据了70%的份额&#xff0c;他是怎么做到的&#xff1f; 一家曾为美国自行车品牌代工的台湾工厂&#xff0c;成功从ToB转型为ToC业务&#xff0c;从90%的代工业务转变为全球最大…

迅狐多商户直播商城系统源码:电商领域的创新融合

随着直播技术的兴起和电子商务的蓬勃发展&#xff0c;迅狐多商户直播商城系统源码应运而生&#xff0c;为商家和消费者提供了一个全新的互动购物平台。 多商户直播商城系统源码概述 迅狐多商户直播商城系统源码是一个高度集成的解决方案&#xff0c;它结合了直播的即时性和电…

进入容器修改内容_提交改变后的镜像_镜像保存成tar压缩包离线传输_镜像传输_镜像推送到公共仓库---分布式云原生部署架构搭建009

然后再来看,进入docker内部去看看. 用 docker exec -it imgid /bin/bash 这样就可以进入容器内部 而且关于,镜像的,内部放到什么地方了,都可以找到比如 在hub.docker的地址里面,找到nginx可以看到,对应的 /usr/share/nginx/html 可以看到这个路径. 然后去看看,进入到/usr…

浏览器(Browser):轻量级浏览器,高效浏览新体验

在可的哥桌面&#xff08;Codigger Desktop&#xff09;&#xff0c;我们始终秉持创新精神&#xff0c;致力于提供卓越的用户体验。如今&#xff0c;我们激动地宣布一项全新功能的发布——轻量级浏览器Browser。这款浏览器的推出&#xff0c;正是我们对用户体验追求的再次体现&…

C++:你用过MultiIndex容器吗?

作为C开发者&#xff0c;我们对键值容器非常熟悉&#xff0c;例如std::set、std::map、std::unordered_map等。这些容器以其强大的功能和高效的性能&#xff0c;成为我们处理数据存储和检索任务时的得力助手。但是你用过多键容器&#xff08;MultiIndex&#xff09;吗&#xff…

【大分享06】收、治、用、安“四管齐下”, 做好多业务系统电子文件归档与管理

关注我们 - 数字罗塞塔计划 - 本篇是参加由电子文件管理推进联盟联合数字罗塞塔计划发起的“大分享”活动投稿文章&#xff0c;来自上海泰宇信息技术股份有限公司&#xff0c;作者&#xff1a;金靓。 随着数字政府建设的深入推进以及“互联网政务服务”的快速发展&#xff0c…