0

こんにちは、私は SD カードのファイル システムをチェックする必要があるアプリケーションに取り組んでいます。また、挿入された SD カードが書き込み保護されているかどうかをチェックする必要があります。次のように、ファイル システムの詳細を取得することに成功しました。

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 かがわかります。ここで、書き込み禁止の詳細を実現したいと考えています。挿入されたSDカードが書き込み保護されているかどうかを確認できるQt APIですか?助けてください :)

アップデート:

これは、QFileInfo を使用して行ったことです。

QFileInfo fileInfo(deviceData->m_strPath);                    

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

書き込み保護されたアクセス許可を設定していても、常に WriteProtect Disable が表示されます。

4

2 に答える 2

2

Qtではそれができないと思います。ターゲット プラットフォームごとにカスタム コードを追加する必要があります。

ただし、空のファイルを作成してすぐに削除することもできます。ファイルの作成に失敗した場合、ボリュームは読み取り専用である可能性があります (または、空き容量が不足しているため、エラー コードを確認する必要があります)。

于 2013-04-23T06:03:04.023 に答える
0

QTでそれを行う方法についてはわかりませんが、WinAPIはGetVolumeInformation(http://pinvoke.net/default.aspx/kernel32/GetVolumeInformation.html)メソッドを提供します(天気ドライブが書き込み禁止かどうかを確認できます)、次のフラグを返します。

/// <summary>
/// The specified volume is read-only.
/// </summary>
ReadOnlyVolume = 0x80000,
于 2013-05-29T23:12:53.357 に答える