c++ 如何在QT中检查文件是否写保护?

t3psigkw  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(243)

我需要检查文件是否可写,以便在用户试图打开不可写的文件时显示警告消息。
我在QT论坛上找到了以下检查文件是否可写的示例:

const QFileInfo info(fileName);
if (info.permission(QFile::WriteOwner | QFile::WriteGroup | QFile::WriteUser)) {
  qDebug() << "File is writable";
} else {
 qDebug() << "Read Only file";
}

// Or even simpler:
if (info.isWritable()) {
  qDebug() << "File is writable";
} else {
 qDebug() << "Read Only file";
}

但不幸的是,上面的例子只适用于文件具有只读属性的情况,例如(这个文件是简单的txt,我将其标记为只读):

我在QT论坛上发现我应该先看看文件权限。所以,正如你所看到的,我的文件不是只读文件(这是我正在工作的真实的文件的权限)。

如果我转到文件属性的安全部分,我会意识到该文件只有读取和执行权限,当然没有写入权限。

我尝试用下面的代码获取文件权限,但似乎不起作用。

QFileDevice::Permissions p = QFile(fileName).permissions();

if (p & QFileDevice::ReadOwner)
{
    qDebug() << "Read file";
}
if (p & QFileDevice::WriteOwner)
{
    qDebug() << "Write file";
}
if (p & QFileDevice::ExeOwner)
{
    qDebug() << "Exec file";
}

输出:

Read file
Write file

我尝试了另一个变体,如writeUser,但得到了相同的结果。
任何想法或建议。
我使用的是Windows 10。
很抱歉,我无法共享用于测试的文件。

unhi4e5o

unhi4e5o1#

我不熟悉Qt,但可以使用std::filesystem来实现:

auto p = std::filesystem::status(file_name).permission();

if(p & std::filesystem::perms::owner_read) { ... }
if(p & std::filesystem::perms::owner_write) { ... }
if(p & std::filesystem::perms::owner_exec) { ... }

您也可以使用八进制值建立filesystem::perms

if(p & std::filesystem::perms{0400}) { ... }

有关不同perms可用值的更多信息:https://en.cppreference.com/w/cpp/filesystem/perms

相关问题