首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何测试文件是否处于锁定和/或只读状态而不打开?

如何测试文件是否处于锁定和/或只读状态而不打开?
EN

Stack Overflow用户
提问于 2019-05-29 01:47:02
回答 1查看 660关注 0票数 1

有没有一种可移植的(std::filesystem)方法来测试文件是否被“锁定”或拥有“只读”权限?例如,POSIX有一个不同于标准MacOS“权限”的“锁定”设置。

在尝试执行删除操作之前,我需要测试是否可以删除文件。理想情况下,我希望避免打开R/W文件作为测试。

这是在保存/重命名过程中进行的,并且(至少在过去的MacOS文件系统中),即使文件在查找器中被“锁定”,操作系统也会调用“交换”两个文件。由于围绕如何保存文件的复杂性,以及以前版本是如何“保留”的,所以最好提前知道,这样就可以避免操作。

进一步注意:在具有读写权限的锁定文件上以R/W (std::ios::out | std::ios::in)打开流将失败,错误号=1(不允许操作)。如果文件是只读的,但没有锁定,它将失败并返回errno 13 (权限被拒绝)。

这里讨论了一种特定于MacOS (Cocoa)的方法来测试锁位:

How to check whether a file is locked in Cocoa?

EN

回答 1

Stack Overflow用户

发布于 2019-05-29 02:56:00

好的--这可能不是确切的答案,但看起来您可以做到这一点(正如建议的here

代码语言:javascript
复制
#include <sys/stat.h>

bool IsLocked(std::string& thePath)
{
    bool isLocked = false;

    struct stat buf;
    int retval = stat(thePath.c_str(), &buf);     // NOTE: retval could be an error, like ENOENT (file doesn't exist)
    if (0 != (buf.st_flags & UF_IMMUTABLE)) {
        isLocked = true;
         //is immutable
    }

    return isLocked;
}

在我自己的代码中,我以一种更健壮的方式处理retval错误。你也应该这样做!

但请注意:虽然这确实正确地指示了文件的Finder的锁位/标志的状态,但它并不反映文件是否为“只读”。UF_IMMUTABLE上的文档说“文件不能被更改”--这显然是不准确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56347581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档