gpt4 book ai didi

macos - NSFileManager 删除项目路径 :error: does not respect POSIX permissions

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

我有一些代码可以检查文件是否存在,如果存在,则将其删除。问题是,即使文件不可写,我也无法让它失败。我的代码如下所示:

if([theManager fileExistsAtPath:savingAs isDirectory:&destIsDir])
{
BOOL itemRemoved=[theManager removeItemAtPath:savingAs error:&err];
if(!itemRemoved)
{
// why?
NSAlert *rebuildAlert=[NSAlert alertWithMessageText:@"Error removing item"
defaultButton:nil alternateButton:nil otherButton:nil
informativeTextWithFormat:@"%@",[err localizedDescription]];
[rebuildAlert runModal];
proceed=NO;
}
}

即使我将所有权设置为 root:wheel 并将模式设置为 000(即任何人都无法读取、写入或执行),该文件仍然会被悄悄删除。我运行此程序的帐户是具有管理员权限的用户帐户,但即便如此,能够杀死 root 拥有的文件似乎也不是很安全。引发错误的唯一方法是使用 chflags uchg filename 锁定文件。我还实现了(目前作为 stub )fileManager:shouldRemoveItemAtPath: 委托(delegate)方法,必要时我可以在其中检查权限。问题在于,从此方法返回 NO 不会导致 removeItemAtPath: 返回错误。使用 fileExistsAtPath: 重新检查似乎很麻烦。最后,似乎没有一个简单的方法可以消除委托(delegate)方法中哪个 NSFileManager 实例正在发出对 removeItemAtPath: 的调用的歧义。通常,这些实例是临时对象,因此它们的 id 在很长一段时间内都无效。我可以对 NSFileManager 进行子类化并添加一个标签实例变量,但这看起来像是一把大锤来破解坚果。

总结:

1)removeItemAtPath 忽略不属于它的文件的行为是否正确?

2) 委托(delegate)方法中禁止文件删除不会传达给 removeItemAtPath

的调用者

3) 很难确定哪个调用正在调用委托(delegate)方法

最佳答案

这是正确的行为。删除文件不需要读取该文件,只需要读取包含该文件的目录。将目录视为文件列表,删除文件就像将其从该列表中删除一样,这一切都是有意义的。

关于macos - NSFileManager 删除项目路径 :error: does not respect POSIX permissions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821179/

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