日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码)

發(fā)布時(shí)間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

項(xiàng)目中用到了監(jiān)測某磁盤(如:C盤、D盤等)的總?cè)萘亢涂捎萌萘?#xff0c;查了一下,發(fā)現(xiàn)其實(shí)挺簡單,調(diào)用一個(gè)Windows自帶的API:GetDiskFreeSpaceEx( ... )就可以解決。用Qt做了一個(gè)測試?yán)?#xff0c;如下所示。

??另:測試發(fā)現(xiàn),如果給定路徑不存在(如程序中"F:\"),則獲取不到信息;通常給定用以獲取磁盤容量信息的路徑為“C:\”、"D:\"等,但給定已存在路徑(如程序中"D:\Test"),同樣可以獲取到該路徑所屬信息。

示例代碼:

/*main.cpp*/

#include "acquirediskspace.h"

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

AcquireDiskSpace w;

w.show();

return a.exec();

}

/*acquirediskspace.h */

#ifndef ACQUIREDISKSPACE_H

#define ACQUIREDISKSPACE_H

#include

class QLineEdit;

class AcquireDiskSpace : public QDialog

{

Q_OBJECT

public:

AcquireDiskSpace( QWidget *parent = 0 );

~AcquireDiskSpace();

protected slots:

void slotDiskChanged( const QString& );

private:

void GetDiskSpace( QString strDisk, double& dTotalBytes, double& dFreeBytes );

private:

QLineEdit* m_pEdtTotalSpace;

QLineEdit* m_pEdtFreeSpace;

};

#endif // ACQUIREDISKSPACE_H

/*acquirediskspace.cpp */

#include "acquirediskspace.h"

#include

#include

#include

#include

#include

#include

#include "windows.h"

AcquireDiskSpace::AcquireDiskSpace( QWidget *parent )

: QDialog( parent )

{

setWindowFlags( Qt::WindowTitleHint );

resize( 400, 400 );

setStyleSheet( "QDialog{background:white;}" );

m_pEdtTotalSpace = new QLineEdit;

m_pEdtTotalSpace->setEnabled( false );

m_pEdtTotalSpace->setMinimumHeight( 30 );

m_pEdtFreeSpace = new QLineEdit;

m_pEdtFreeSpace->setEnabled( false );

m_pEdtFreeSpace->setMinimumHeight( 30 );

//Disk

QComboBox* pCmbDisk = new QComboBox;

pCmbDisk->addItem( "C:/" );

pCmbDisk->addItem( "D:/Test" );

pCmbDisk->addItem( "E:/" );

pCmbDisk->addItem( "F:/" );

pCmbDisk->addItem( "G:/" );

pCmbDisk->setMinimumHeight( 30 );

//Button

QPushButton* pBtnOK = new QPushButton( "OK" );

pBtnOK->setMinimumHeight( 30 );

QHBoxLayout* pBtnLayout = new QHBoxLayout;

pBtnLayout->addWidget( pBtnOK );

//MainLayout

QGridLayout* pMainLayout = new QGridLayout;

pMainLayout->addWidget( new QLabel( "Total:" ), 0, 0, Qt::AlignRight );

pMainLayout->addWidget( m_pEdtTotalSpace, 0, 1 );

pMainLayout->addWidget( new QLabel( "GB" ), 0, 2 );

pMainLayout->addWidget( new QLabel( "Free:" ), 1, 0, Qt::AlignRight );

pMainLayout->addWidget( m_pEdtFreeSpace, 1, 1 );

pMainLayout->addWidget( new QLabel( "GB" ), 1, 2 );

pMainLayout->addWidget( new QLabel( "Disk:" ), 2, 0, Qt::AlignRight );

pMainLayout->addWidget( pCmbDisk, 2, 1 );

pMainLayout->addLayout( pBtnLayout, 3, 1 );

setLayout( pMainLayout );

//connects

connect( pCmbDisk, SIGNAL( currentIndexChanged( const QString& ) ), this, SLOT( slotDiskChanged( const QString& ) ) );

connect( pBtnOK, SIGNAL( clicked() ), this, SLOT( accept() ) );

//Init

QString strDisk = pCmbDisk->currentText();

slotDiskChanged( strDisk );

}

AcquireDiskSpace::~AcquireDiskSpace()

{

}

void AcquireDiskSpace::slotDiskChanged( const QString& strDisk )

{

double dTotalBytes, dFreeBytes;

GetDiskSpace( strDisk, dTotalBytes, dFreeBytes );

m_pEdtTotalSpace->setText( QString::number( dTotalBytes, ‘f‘, 3 ) );

m_pEdtFreeSpace->setText( QString::number( dFreeBytes, ‘f‘, 3 ) );

}

void AcquireDiskSpace::GetDiskSpace( QString strDisk, double& dTotalBytes, double& dFreeBytes )

{

LPCWSTR lpcwstrDriver = (LPCWSTR)strDisk.utf16();

ULARGE_INTEGER lFreeBytesAvailable, lTotalBytesTemp, lTotalFreeBytes;

if( !GetDiskFreeSpaceEx( lpcwstrDriver, &lFreeBytesAvailable, &lTotalBytesTemp, &lTotalFreeBytes ) )

{

QMessageBox::warning( 0, "Warning", "Acquire Disk Space Failed !" );

dTotalBytes = -1;

dFreeBytes = -1;

return;

}

//unit : GB

dTotalBytes = lTotalBytesTemp.QuadPart / 1024.0 / 1024 / 1024;

dFreeBytes = lTotalFreeBytes.QuadPart / 1024.0 / 1024 / 1024;

}

結(jié)果如下:

(1)C盤:

??

(2)D盤:

??

(3)F盤(F盤實(shí)際上并不存在,故獲取不到,給了默認(rèn)值-1,-1)

??

總結(jié)

以上是生活随笔為你收集整理的获取计算机最大磁盘,Qt获取电脑磁盘容量(示例代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。