如何在Qt中检查插入的SD卡是否有写保护
How to check whether inserted SD Card is write protected or not in Qt?
嗨,朋友们,我正在做一个应用程序,我应该检查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。现在我想实现写保护的细节。他们是一个Qt API,可以给我插入的SD卡是否写保护?请帮忙:)
更新:
这是我使用QFileInfo: 所做的QFileInfo fileInfo(deviceData->m_strPath);
if(!fileInfo.isWritable())
{
newData.strStatus = "WriteProtect Enabled";
}
else
{
newData.strStatus = "WriteProtect Disabled";
}
它总是结束给我WriteProtect禁用,即使我已经设置了写保护权限。
我怀疑Qt不能做到这一点,你需要为每个目标平台添加自定义代码。
但是,您可以简单地尝试创建一个空文件,然后立即删除它。如果创建文件失败,那么卷可能是只读的(或者它已经耗尽了可用空间,您需要检查错误代码来确定)。
不确定如何在QT中做到这一点,但WinAPI为您提供了GetVolumeInformation (http://pinvoke.net/default.aspx/kernel32/GetVolumeInformation.html)方法(允许您检查天气驱动器是否写保护),返回以下标志:
/// <summary>
/// The specified volume is read-only.
/// </summary>
ReadOnlyVolume = 0x80000,
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- C/C++预处理器是否可以检测一些编译器选项
- 如何在Qt中检查插入的SD卡是否有写保护