Qt 中磁盘文件的检测和筛选

获取磁盘容量关键函数:

void
DiskSend::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;

 

//总计:xxGB

    ui.totalLabel->setText(QString::number(dTotalBytes,
'f', 3));

//剩余可用:xxGB

    ui.freeLabel->setText(QString::number(dFreeBytes,
'f', 3));

}

一、磁盘容量检测

该模块细分三个子模块

(1)通过改变QCommboBox indexcahnged信号槽,来获取对应磁盘总容量和所剩可用容量

定义QcommBox信号槽,获取磁盘String

connect(ui.comboBox,
SIGNAL(currentIndexChanged(const QString&)),

this, SLOT(slotDiskChanged(const
QString&)));

(2)通过设置定时器,每隔十秒检测所有磁盘容量并展示出来

定义定时器,每隔10检测设备所有磁盘一次

connect(m_timer,
SIGNAL(timeout()), this, SLOT(slotDiskChanged()));

(3)通过UDP发送该设备所有磁盘信息

QByteArray
datagram;

QDataStream
out(&datagram, QIODevice::WriteOnly);

out.setVersion(QDataStream::Qt_5_5);

out <<
/*QDateTime::currentDateTime() << */dTotalBytes << dFreeBytes;

//qDebug() <<
QDateTime::currentDateTime();

QHostAddress
address;

address.setAddress(“192.168.1.67”);

udpSocket->writeDatagram(datagram,
address, 5555);

QThread::sleep(1);

二、筛选磁盘内特定文件

遍历所有磁盘

遍历每个磁盘所有文件夹,直至文件夹没有子节点(即文件)

注:此时我们找的是指定文件(test.txt)

根据前缀fname
来遍历查找 sfiles.baseName() ;

void DiskSend::findSpecialFile(QString strDir, QStringList fileName,QStringfname)
{
    QDir curdir(strDir);
    curdir.setFilter(QDir::AllEntries |QDir::NoDotAndDotDot);
    QFileInfoList curdirlist =curdir.entryInfoList();
    foreach(QFileInfo sfiles, curdirlist)
    {
        QString sfilesname = sfiles.fileName();
        if (sfiles.isDir() == true)
        {
            QString strFileName =sfiles.filePath();
            findSpecialFile(strFileName,fileName,fname);
        }

        if (sfiles.isFile() == true)

        {       

            QString base = sfiles.baseName() ;
            if(fname.contains(base,Qt::CaseInsensitive))
            {

                sfileNamePath snew;
                snew.strFileName =sfiles.fileName();

                snew.strFilePath =sfiles.filePath();
                g_sfnp.append(snew);

                ui.lineEdit_2->setText(snew.strFilePath);

            }
        }
    }
    //return s;
}

猜你喜欢

转载自blog.csdn.net/weixin_43778462/article/details/106408942
今日推荐