如何测试文件是否被锁定和/或只读而不打开?

2024-04-25

是否有可移植的(std::filesystem)方法来测试文件是否“锁定”或具有“只读”权限?例如,MacOS Finder 具有“锁定”设置,这与标准 POSIX“权限”不同。

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

这是在保存/重命名过程中,并且(至少在过去的 MacOS 文件系统中),即使文件在 Finder 中“锁定”,操作系统调用“交换”两个文件也会起作用。由于文件如何保存以及如何“保留”先前版本的复杂性,最好提前了解,以便避免操作。

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

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

如何在 Cocoa 中检查文件是否被锁定? https://stackoverflow.com/q/11737819/516545


好的——这可能不是准确的答案,但看起来你可以这样做(按照建议here https://stackoverflow.com/a/13119512/516545:

#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 的文档说“文件可能无法更改”——这显然不准确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试文件是否被锁定和/或只读而不打开? 的相关文章

随机推荐

  • 重写后.htaccess图像不显示

    我有一个问题 URL 已被这样重写 RewriteEngine on RewriteCond REQUEST URI index php RewriteRule index php test 1 NC L 我的图像和 CSS 样式都没有被应
  • VB.NET Custom Control(自定义绘图)刷新问题

    我用两个项目创建了一个简单的解决方案 第一个项目 类库 包含一个名为 Container 的自定义控件 它用圆角绘制自身 第二个项目 Windows 窗体 是一个测试应用程序 如果我在第二个项目的主窗体中添加一个容器实例 它会很好地显示圆角
  • Rails,为什么连接返回具有非唯一值的数组?

    我使用 Rails 3 为例 但我相信 Rails 2 3 也是如此 假设 我有一个有很多位置的模型城市 我尝试寻找有地点的城市 我使用以下代码 City joins locations 但输出数组是 gt
  • 如何对arraylist进行一系列排序操作(多个排序条件)

    我有一个对象数组列表 我想在此列表上运行一系列排序操作 例如 我想首先按名称对它们进行排序 如果两个名称相同 则按 id 对它们进行排序 我怎样才能实现它 这是我的代码 Comparator
  • MacVim 中的 Inconsolata 斜体

    我正在尝试使用 Inconsolata 作为 MacVim 中的字体 但我似乎找不到斜体版本 我使用的是日晒配色方案 它应该使注释斜体化 并且它适用于字体书中具有斜体或倾斜版本的字体 有没有办法以某种方式 制作 斜体版本 是不是有什么文件我
  • Python win32com - 自动化 Word - 如何替换文本框中的文本?

    我正在尝试使用 Python 自动化 Word 来替换 Word 文档中的文本 如果重要的话 我使用的是 word 2003 和 Python 2 4 下面我的替换方法的第一部分适用于除文本框中的文本之外的所有内容 文本只是没有被选择 我注
  • 将数组映射到 Symfony2/Doctrine2 中的实体

    我正在使用 DoctrineFixtures 包在开发过程中创建示例实体 在我的 ORM 装置 load 方法中 我将数据定义为关联数组并在循环中创建实体对象
  • 用于匹配编号大于的类的 CSS 选择器

    我有一个使用 Sencha Touch 2 开发的移动混合应用程序 需要根据其运行的 iOS 版本进行一些自定义 我的 Sass 样式表中曾经有以下选择器 x ios 7 put here iOS7 customizations 现在 iO
  • 换行符 unicode 字符

    我想要一个可用于表示新行的 Unicode 字符 我以前见过它 但通过我尝试过的任何谷歌搜索都找不到它 它看起来像这样 lt 有几种可能性 选择也可能取决于字体 因为并非所有字体都适用于所有字体 并且其中一些具有相当不同的形状 并且有些在小
  • 类型错误:无法读取 null 的属性(读取“useRef”)

    我正在使用 Next js TypeScript sanity 和 tailwindcss 我尝试使用react hook form 但收到错误 我试过了 改变Post函数到箭头函数 改变Post函数到 const 函数 改变IFormIn
  • Gradle fileTree 排除除某些目录之外的所有目录

    我正在使用 fileTree 实用程序来获取文件列表 但需要排除除列表中选定的几个目录之外的所有目录 我的目录结构 node modules react native react third party package another pa
  • 如何将颜色条添加到已有的绘图图形中?

    我有以下图表 其数据 位置和颜色值 来自外部源 import plotly graph objs as go from plotly offline import init notebook mode iplot data go Scatt
  • 如何读取箭头镶木地板键值元数据?

    当我在 R 和 Python 中保存 parquet 文件 使用 pyarrow 时 我得到一个保存在元数据中的箭头模式字符串 如何读取元数据 是Flatbuffer编码的数据吗 模式的定义在哪里 它没有在箭头文档网站上列出 元数据是一个键
  • 错误:“主机标识符中存在双冒号”

    我正在尝试连接到我在 MLab 托管的数据库 我正在使用 StrongLoop API 我已将托管数据库的配置信息放入 datasources json 和 config json 文件中 但每当我使用以下命令运行目录时npm start
  • 是否存在用于将 C++ 代码移植到 64 位的自动转换工具?

    我正在研究将大量 gt 10M 行 C 代码移植到 64 位的方法 我已经研究了静态代码分析器和编译器标志 现在正在研究可以进行常见的重复更改的宏或其他工具 我写了一些正则表达式来看看它们在实践中的效果如何 正如预测的那样 它们非常有效 也
  • 如何在更改屏幕方向android时保留回收器视图的选定项目?

    我想在屏幕方向改变时保留 RecyclerView 所选项目的状态 但每当我更改方向时 所选项目不会保留其状态 所以我保存所选项目的位置和方向变化onResume 我获取了位置 并通过使用 RecyclerView 的 getChildAt
  • 使用变量作为关键字来分配关键字参数的最 Pythonic 方式?

    What is 最Pythonic的方式解决以下问题 从交互式 shell 中 gt gt gt def f a False if a return a was True return a was False gt gt gt f a Tr
  • 维梅奥上传。无法获取响应中的complete_uri字段

    我在上传到 vimeo 时花了很多功夫 我已经提出了门票请求 我已经上传文件了 我已经检查了文件是否已上传 我需要使用我应该从票证中获得的complete uri 响应来运行DELETE 方法 但是 我没有从票证响应中收到任何complet
  • Flexbox 布局,左侧有两个项目,右侧有一个项目

    我正在尝试使用 Flexbox 实现以下布局 A C B 是否可以在不将 A 和 B 包装到包装器中的情况下这样做 是的 这是可能的 请考虑到在此示例中主容器具有固定的宽度和高度 container height 200px width 3
  • 如何测试文件是否被锁定和/或只读而不打开?

    是否有可移植的 std filesystem 方法来测试文件是否 锁定 或具有 只读 权限 例如 MacOS Finder 具有 锁定 设置 这与标准 POSIX 权限 不同 在尝试执行删除操作之前 我需要测试是否可以删除文件 理想情况下