gpt4 book ai didi

macos - 在 Cocoa 中设置符号链接(symbolic link)的修改日期

转载 作者:行者123 更新时间:2023-12-03 16:17:20 25 4
gpt4 key购买 nike

在Cocoa中,我想设置符号链接(symbolic link)的修改日期。

使用[NSFileManager setAttributes:ofItemAtPath:error:]适用于常规文件,但不适用于符号链接(symbolic link)。

我怎样才能实现这一目标?

最佳答案

无法直接使用 NSFileManager 来完成此操作。 setAttributes:ofItemAtPath:error: 方法包装了一堆基于 BSD 路径的函数,如 utimes、setxattr、chown 等,所有这些函数都遵循符号链接(symbolic link),而不是直接对其进行操作。

一个明显的替代方案是手动下降到 BSD 层。有些函数有“不遵循符号链接(symbolic link)”的版本,例如 lchown,但并非所有函数都有。特别是,改变 mod 时间 utimes 的那个则不会。所以你必须打开该文件并使用基于 fd 的变体 futimes。代码如下所示:

int fd = open([NSFileManager fileSystemRepresentationWithPath:path], O_RDONLY | O_SYMLINK);
futimes(fd, 0);
close(fd);

如果您打算做很多这样的事情,您可以在 NSFileManager 上的一个类别中编写自己的 setAttributes:ofSymlinkAtPath:error: 实现,该类别包含 futimes、fchflags、fsetxattr 等。

唯一真正的问题是您需要具有对符号链接(symbolic link)本身的读取访问权限(以及修改 mod 时间等所需的任何访问权限)才能正常工作,但这通常不是问题,据我所知,OS X 无论如何也没有办法解决这个问题。 (Linux 确实允许您打开一个既不读也不写的文件,只是为了执行 f* 调用,但 BSD 不允许。)

作为另一种选择,我相信 NSURL 文件 URL API 不遵循符号链接(symbolic link),这意味着这应该可以工作(但我现在不在我的 Mac 前面,所以我不能测试):

[[NSURL fileURLWithPath:path isDirectory:NO] setResourceValue:[NSDate date] forKey:NSURLContentModificationDateKey error:nil];

关于macos - 在 Cocoa 中设置符号链接(symbolic link)的修改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10608724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com