gpt4 book ai didi

cocoa - 什么时候调用 fileExistsAtPath 合适?

转载 作者:行者123 更新时间:2023-12-03 17:01:39 24 4
gpt4 key购买 nike

fileExistsAtPath 的文档如下:

Attempting to predicate behavior based on the current state of the file system or a particular file on the file system is not recommended. Doing so can cause odd behavior or race conditions. It’s far better to attempt an operation (such as loading a file or creating a directory), check for errors, and handle those errors gracefully than it is to try to figure out ahead of time whether the operation will succeed. For more information on file-system race conditions, see Race Conditions and Secure File Operations in Secure Coding Guide.

但这对我来说似乎很荒谬。 fileExistsAtPath 返回一个 BOOL,显然通常用于“谓词行为”并在代码路径之间进行选择,例如使用条件句。因此,本文档的措辞方式似乎暗示 fileExistsAtPath 不应该被使用 - 但这没有任何意义。

不尝试预测行为的 fileExistsAtPath 的实际用途是什么?存在吗?

如果没有,并且文档措辞不佳,那么 fileExistsAtPath 的谓词行为的实际用途是什么,并且在给出警告的情况下实际上是安全的?

最佳答案

“不推荐”与“不应该使用”不同。

事实是,-fileExistsAtPath: 和类似的 API 已经很常见了很长时间。在那段时间里,程序员获得了痛苦的经验,他们经常被滥用并可能导致安全问题。因此,他们的文档已被修改,以包含您通常不应使用它们的警告。

特别是,仅仅因为 -fileExistsAtPath: 返回 true 并不意味着当您访问该文件时该文件仍然存在。仅仅因为它返回 false 并不意味着如果您尝试在其位置创建某些内容,它就不会存在(并且您的尝试可能会失败,或者您可能会打开一个文件而不是创建一个文件)。

无论 -fileExistsAtPath: 告诉您什么,您都需要仔细处理所有情况,因此通常最好不要调用它。这是浪费的代码。

也就是说,在某些情况下它是适合使用的。例如,如果您的 UI 有一个控件可以删除您的应用“拥有”的文件,则如果该文件不存在,您可以禁用该控件。但是您需要重新检查应用程序事件/更新循环的每次传递。另外,如果它是因为该文件最近确实存在而启用的,那么当您的应用程序实际尝试删除该文件时,如果它不存在,则您的应用程序一定不会失败或做一些坏事。

关于cocoa - 什么时候调用 fileExistsAtPath 合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40228516/

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