检查包中是否存在文件

发布于 2024-10-30 16:47:45 字数 40 浏览 5 评论 0原文

在获取文件之前,我们如何检查应用程序中加载的外部包中是否存在文件?

How can we check if a file is present in the external bundle loaded in the app or not before fetching it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

要检查包中是否存在文件,请使用 NSBundle 类。

NSString *path = [[NSBundle mainBundle] 
                            pathForResource:@"somefileinbundle" 
                            ofType:@"png"];
if (!path)
   NSLog(@"Unable to find file in bundle");

然而话虽如此,在尝试加载文件之前先检查文件是否存在通常是一个坏主意。根据 NSFileManager fileExistsAtPath: 上的 Apple 文档

不建议尝试根据文件系统的当前状态或文件系统上的特定文件来预测行为。在文件系统竞争条件下,这样做可能会导致奇怪的行为。 尝试执行某个操作(例如加载文件或创建目录)、检查错误并妥善处理任何错误,这比尝试提前确定操作是否会成功要好得多。 有关文件系统竞争条件的更多信息,请参阅《安全编码指南》中的“避免竞争条件和不安全的文件操作”


To check if a file exists in the bundle, use the NSBundle class.

NSString *path = [[NSBundle mainBundle] 
                            pathForResource:@"somefileinbundle" 
                            ofType:@"png"];
if (!path)
   NSLog(@"Unable to find file in bundle");

Having said that however, it's typically a bad idea to check if a file exists first before trying to load it. According to the Apple docs on NSFileManager 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 in the case of file system race conditions. It's far better to attempt an operation (such as loading a file or creating a directory), check for errors, and handle any error 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 “Avoiding Race Conditions and Insecure File Operations” in Secure Coding Guide

野味少女 2024-11-06 16:47:45

如果您只想知道它是否存在,以便决定是否加载它,我只是尝试加载它并检查返回的对象是否为零。如果是,您就知道它不存在于捆绑包中。

If you only want to know if it's there so you can decide whether to load it or not, I'd just attempt to load it and check if the object returned is nil. If it is, you know it doesnt exist in the bundle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文