linux系統和windows系統檢測磁盤大小報警

1.應用場景

需要往磁盤中存儲圖片和或者數據,需要檢測磁盤大小,當小於5GB的時候提示用戶,並停止存儲圖片和數據,避免磁盤塞滿,無法啓動系統或者操作電腦;

2.實現方法

用一個定時器去定時查詢磁盤空間大小,linux系統,採用QProess執行命令,然後解析命令返回值,獲取剩餘的磁盤空間

void FaceMatch::SlotCheckDriverMemory()
{
	///磁盤名
	QString strpicPath = CConfig::instance()->GetResaultPath();
#ifdef OS_WINDOWS
	QString iDriver = strpicPath.left(3);
	LPCWSTR strDriver = (LPCWSTR)iDriver.utf16();
	ULARGE_INTEGER freeDiskSpaceAvailable, totalDiskSpace, totalFreeDiskSpace;
	///調用函數獲取磁盤參數(單位爲字節Byte)
	GetDiskFreeSpaceEx(strDriver, &freeDiskSpaceAvailable, &totalDiskSpace, &totalFreeDiskSpace);
	quint64 freeDB = totalFreeDiskSpace.QuadPart / (1024 * 1024 * 1024);
	m_VideoAnalysisTaskList->SlotSetStoreSpace(freeDB>=5);
	if (freeDB < 5)//space less than 5GB
	{
		if (m_bigThanFiveGB == true)
		{
			m_bigThanFiveGB = false;
			SlotError(-1, strpicPath + "磁盤空間不足5G,請在SystemConfig.xml配置文件切換磁盤,或者清除數據。");
		}
		else
		{
			m_bigThanFiveGB = false;
		}

	}
	else//space big than 5GB
	{
		if (m_bigThanFiveGB == false)//space
		{
			m_bigThanFiveGB = true;
			m_VideoAnalysisTaskList->StartNextWaitTask("struct");
			m_VideoAnalysisTaskList->StartNextWaitTask("gait");
			SlotError(0, strpicPath + QString("磁盤空間剩餘%1,繼續分析").arg(freeDB));
		}
	}
    
#else
	//獲取保存的路徑的
	QProcess process;
	process.start("df -h " + strpicPath);
	if (process.waitForFinished())
	{
		QString bytes = process.readAll();
        QString strLeftSize=bytes.split("\n").at(1);
        QStringList list=strLeftSize.split(" ");
        for(int i=0;i<list.size();)
        {
            if(list[i]==" "||list[i]=="")
            {
                list.removeAt(i);
            }
            else
            {
                i++;
            }
        }
        if(list.size()<4)
        {
             LOG_ERROR("Get store info error:%s ",bytes.toStdString().c_str());
             return;
        }
       strLeftSize=list[3];
       strLeftSize= strLeftSize.remove("G");
       int freeDB =strLeftSize.toInt();
        m_VideoAnalysisTaskList->SlotSetStoreSpace(freeDB >=5);
       if(freeDB<5)//space less than 5GB
       {
           if(m_bigThanFiveGB==true)
           {
               m_bigThanFiveGB=false;
              SlotError (-1, CConfig::instance()->GetResaultPath()+ "磁盤空間不足5G,請在SystemConfig.xml配置文件切換磁盤,或者清除數據。");
           }
           else
           {
                m_bigThanFiveGB=false;
           }

       }
       else//space big than 5GB
       {
           if(m_bigThanFiveGB==false)//space
           {
               m_bigThanFiveGB=true;
               m_VideoAnalysisTaskList->StartNextWaitTask("struct");
               m_VideoAnalysisTaskList->StartNextWaitTask("gait");
                SlotError (0, CConfig::instance()->GetResaultPath() + QString("磁盤空間剩餘%1,繼續分析").arg(freeDB));
           }
       }
	}
#endif
	

}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章