qt讀取U盤文件

 

之前想做的一個功能是讀取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打印結果。

複製文件結果。

 

大家如果覺得有幫助,歡迎大家關注公衆號,一起交流,一起進步。

 

 

微信掃一掃
關注該公衆號

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