之前想做的一個功能是讀取U盤中的文件到系統磁盤目錄下,今天抽空把簡版功能實現了。那會兒一直搜索的Qt如何識別U盤,最終得到的結果是Qt檢測U盤插拔,發現並不是我想要的。
在開始前先看下Qt幫助文檔的QStorageInfo類。
提供有關當前安裝的存儲和驅動器的信息
允許檢索有關卷的空間,掛載點,標籤和文件系統名稱等信息。
可以通過將路徑作爲構造函數參數傳遞給卷的掛載點來創建QStorageInfo的實例,也可以使用setPath()方法設置它。靜態的mountedVolumes()方法可用於獲取所有已掛載文件系統的列表。
QStorageInfo始終緩存檢索到的信息,但可以調用refresh()來使緩存無效。
以下示例檢索有關係統根卷的最常見信息,並打印有關它的信息。
QStorageInfo storage = QStorageInfo::root();
qDebug() << storage.rootPath();
if (storage.isReadOnly())
qDebug() << "isReadOnly:" << storage.isReadOnly();
qDebug() << "name:" << storage.name();
qDebug() << "fileSystemType:" << storage.fileSystemType();
qDebug() << "size:" << storage.bytesTotal()/1000/1000 << "MB";
qDebug() << "availableSize:" << storage.bytesAvailable()/1000/1000 << "MB";
總結一下,就是獲取磁盤信息的。在讀取U盤文件時,主要用到的是獲取路徑的功能。有了該功能,再結合QFile::copy() 文件,就可以實現複製U盤內文件的功能了。O的K,上碼。
void Widget::on_pbn_identify_clicked()
{
qDebug() << "----------start----------";
QString UDiskPath = "";
foreach (const QStorageInfo &storage, QStorageInfo::mountedVolumes())
{
if (storage.isValid() && storage.isReady())
{
UDiskPath = storage.rootPath();
if(UDiskPath.contains("media"))
{
qDebug() << "qstring path:" << UDiskPath;
QString fileName = QString("%1%2").arg(UDiskPath).arg("/test.txt");
qDebug() << "path:------"<<fileName;
QString newFileName = "/root/Desktop/test/dh";
bool ok = QFile::copy(fileName, newFileName);
qDebug() << "isOk" << ok;
}
}
}
}
程序很少,所以實現的功能也很單一。如果除去文件的來源是從U盤,這就像是一個複製文件的功能。
遍歷所有磁盤,由於我只想要U盤中的文件,而U盤中的所屬的磁盤是media。之後是獲取路徑添加文件的名稱,再結合QFile的 Copy功能,就這樣。
下面是測試文件的目錄以及結果截圖。
U盤中的測試文件。
磁盤目錄。
Qt打印結果。
複製文件結果。
大家如果覺得有幫助,歡迎大家關注公衆號,一起交流,一起進步。
微信掃一掃
關注該公衆號