2013-04-22 121 views
0

嗨,朋友我正在一個應用程序,我應該檢查SD卡的文件系統,我也需要檢查插入的SD卡是否寫保護。我成功地讓文件系統的詳細信息如下:如何檢查插入的SD卡是否被寫保護或不在Qt中?

TCHAR volumeName[MAX_PATH + 1] = { 0 }; 
TCHAR fileSystemName[MAX_PATH + 1] = { 0 }; 
DWORD serialNumber = 0; 
DWORD maxComponentLen = 0; 
DWORD fileSystemFlags = 0; 

LPCWSTR path = deviceData->m_strPath.utf16(); // deviceData gives me the path of the SD Card 

// Get the file system details 
if (GetVolumeInformation(
         path, 
         volumeName, 
         ARRAYSIZE(volumeName), 
         &serialNumber, 
         &maxComponentLen, 
         &fileSystemFlags, 
         fileSystemName, 
         ARRAYSIZE(fileSystemName))) 
      { 
       newData.strFileSystem = QString::fromUtf16(fileSystemName);     
      } 

m_SDInfoList.append(newData); // m_SDInfoList is QList 

用這種方法我結識的文件系統是FAT32或NTFS。現在我想實現寫保護的細節。他們是一個Qt的API,可以給我插入的SD卡是否寫保護?請幫助:)

更新:

這是我做過什麼用QFileInfo:

QFileInfo fileInfo(deviceData->m_strPath);      

if(!fileInfo.isWritable()) 
{       
     newData.strStatus = "WriteProtect Enabled"; 
} 
else 
{ 
     newData.strStatus = "WriteProtect Disabled"; 
} 

它最終總是給人即使我已經設置了寫保護允許我寫保護禁用。

+0

你正在尋找一個Qt的'GetVolumeInformation' Win32函數嗎?否則,'fileSystemFlags'返回的標誌集中的FILE_READ_ONLY_VOLUME標誌應該提供這些信息 – 2013-04-22 12:46:07

+0

@Andreas:就像我們所知道的,GetVolumeInformation是windows APi,因爲我找不到任何可以使用文件格式細節的Qt API。現在我想知道如何通過fileSystemFlags獲得寫保護狀態? – Gojira 2013-04-22 12:48:20

+0

您只需檢查'fileSystemFlags&FILE_READ_ONLY_VOLUME'是否等於0 - 如果不是,則標誌被設置,表示只讀卷 – 2013-04-22 12:52:25

回答

2

我懷疑你不能用Qt做到這一點。您需要爲每個目標平臺添加自定義代碼。

但是,您可以簡單地嘗試創建一個空文件,然後立即刪除它。如果創建文件失敗,那麼卷可能是隻讀的(或者它已經用完了空閒空間,您需要檢查錯誤代碼以確保其可用)。

+0

謝謝哥們:) – Gojira 2013-04-23 06:53:53