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 }