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

  

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

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

相关文章

excel基本操作

excel 若要取消在数据表中进行的所有筛选 步骤操作&#xff1a; 单击“数据”选项卡。在“排序和筛选”组中&#xff0c;找到“清除”按钮。点击“清除”按钮。 图例&#xff1a; 将文本文件的数据导入到Excel工作表中进行数据处理 步骤&#xff1a; 在Excel中&#xff0c…

java之文件上传代码审计

1 文件上传漏洞审计 1.1 漏洞原理介绍 大部分文件上传漏洞的产生是因为Web应用程序未对文件的格式和进行严格过滤&#xff0c;导致用户可上传jsp、php等webshell代码文件&#xff0c;从而被利用。例如在 BBS发布图片 , 在个人网站发布ZIP压缩包, 在办公平台发布DOC文件等 , 只…

高阶图神经网络 (HOGNN) 的概念、分类和比较

图神经网络&#xff08;GNNs&#xff09;是一类强大的深度学习&#xff08;DL&#xff09;模型&#xff0c;用于对相互连接的图数据集进行分类和回归。它们已被用于研究人类互动、分析蛋白质结构、设计化合物、发现药物、识别入侵机器、模拟单词之间的关系、寻找有效的交通路线…

Vue70-路由的几个注意点

一、路由组件和一般组件 1-1、一般组件 1-2、路由组件 不用写组件标签。靠路由规则匹配出来&#xff0c;由路由器渲染出来的组件。 1-3、注意点1 一般组件和路由组件&#xff0c;一般放在不同的文件夹&#xff0c;便于管理。 一般组件放在components文件夹下。 1-4、注意点…

河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!

河南大学&#xff08;Henan University&#xff09;&#xff0c;简称“河大”&#xff0c;是河南省人民政府与中华人民共和国教育部共建高校&#xff0c;国家“双一流”建设高校&#xff0c;入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…

怎么用二维码在线下载视频?视频用二维码下载的制作方法

怎么把视频转换成二维码之后还可以下载视频呢&#xff1f;现在使用二维码的方式来分享视频内容在很多行业和场景中都有应用&#xff0c;这种方式能够更加简单快捷的完成视频的传播分享&#xff0c;那么怎么让扫码者可以自由选择下载视频呢&#xff1f;下面来给大家分享扫码下载…

深入探索C++中的AVL树

引言 在数据结构和算法的世界里&#xff0c;平衡二叉搜索树&#xff08;Balanced Binary Search Tree, BST&#xff09;是一种非常重要的数据结构。AVL树&#xff08;Adelson-Velsky和Landis发明的树&#xff09;就是平衡二叉搜索树的一种&#xff0c;它通过自平衡来维护其性质…

zookeeper + kafka消息队列

zookeeper kafka 消息队列 一、消息队列简介 1、什么是消息队列 消息队列&#xff08;Message Queue&#xff09;是一种用于跨进程或分布式系统中传递消息的通信机制。消息队列在异步通信、系统解耦、负载均衡和容错方面具有重要作用。 &#xff08;1&#xff09;特性 异步…

c++ 里构造函数的形参与数据成员的同名问题

如题&#xff0c;这时&#xff0c;或许在 java 里&#xff0c;会报语法错误。但在 c vs2019 开了 c20语法规范。这不再是错误。这样的好处是解决了咱们的起变量名的麻烦&#xff1a;重名现在已不是错误&#xff0c;编译器可以解决了。测试如下&#xff1a; 我们看看 c 编译器是…

如何正确理解和评估品牌价值?

在当今这个品牌林立的商业世界里&#xff0c;我们常常听到企业家们满怀憧憬地谈论品牌梦想。 但究竟是什么驱使这些企业去打造一个品牌&#xff0c;到底是市场的激烈竞争&#xff0c;还是内心的情感寄托&#xff1f;亦或是社会发展的必然趋势&#xff0c;引领我们追求超越产品…

1969python房屋租赁管理系统mysql数据库Flask结构BootStrap布局计算机软件工程网页

一、源码特点 python Flask房屋租赁管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解python编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 python flask 房屋租赁管理系统 开发环境pycharm mysql …

鸿蒙正在跨越“生态繁荣阈值”

作者 | 曾响铃 文 | 响铃说 先讲一个故事。 一个朋友曾经做了一个本地互联网装修平台&#xff0c;一边是装修服务的提供者——各工种工人等&#xff0c;一边是有装修需求的业主。这个平台要做独立生态&#xff0c;绕过旧有的装修公司渠道垄断&#xff0c;直接提供服务&#…

Android开发系列(六)Jetpack Compose之Box

Box是一个用来组合和控制子元素布局的组件。它可以在一个矩形区域内排列一个或多个子元素&#xff0c;并根据所提供的参数来控制它们的位置、大小和样式。 Box的功能类似传统的FrameLayout。 下面通过示例了解Box的使用方法&#xff0c;首先看一个最简单的示例&#xff0c;如下…

永磁同步电机驱动死区补偿

1 死区效应及补偿 1. 1 死区效应 在本文的电机控制嵌入式系统中,逆变器为三 相电压型桥式逆变电路,如图 1 所示。 在理想状态 下,上桥臂和下桥臂的控制信号满足互补通断原则, 即上桥臂开通时,下桥臂关断,反之亦然。 而在实际 应用中,开关管的通断需要一定的开通时…

Nginx HTTPS(证书) 部署实战

一、申请证书与认证 要搭建https服务首先需有SSL证书&#xff0c;证书通常是在第三方申请&#xff0c;在阿里云的安全服务中有SSL证书这一项&#xff0c;可以在里面申请免费的证书。也可以在自己电脑中生成&#xff0c;虽然也能完成加密&#xff0c;但是浏览器是不认可的&…

美创科技入选“2024年度浙江省工业信息安全服务支撑单位”

近日&#xff0c;浙江省经济和信息化厅公布“2024年度浙江省工业信息安全服务支撑单位”名单。 经单位自愿申报、各市经信主管部门初审推荐、专家评审等环节&#xff0c;凭借在工业数据安全领域长期深耕和产品服务实力&#xff0c;美创科技成功入选&#xff01; “2024年度浙江…

理解 JTBD 框架和EJ 理念:深挖以用户为中心的设计

在与用户的交流中&#xff0c;我们发现对用户需求的精准洞察普遍困扰着产品经理、设计、企划人员&#xff0c;因为当今消费者行为已经由单品消费转向场景消费&#xff0c;千人千面的个性化需求出现&#xff0c;消费者数据维度极大丰富&#xff0c;这对把握用户体验造成了很大挑…

工具与技术:如何使用工具创建和实现导航栏图标动效

这篇教程的目的主要是带领大家做UI交互的入门引导,让大家理解做交互动效的一些基本逻辑思维,利用原型交互动画做导航栏icon动画效果。 导航栏icon动效的详细教程&#xff1a; 即时设计 - 可实时协作的专业 UI 设计工具即时设计是一款支持在线协作的专业级 UI 设计工具&#x…

2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材&#…