我发现了一种在目录不存在时创建目录的方法.但它看起来有点不稳定,我担心这可能会在1000次try 中出错.

if(![[NSFileManager defaultManager] fileExistsAtPath:bundlePath]) {
    [[NSFileManager defaultManager] createDirectoryAtPath:bundlePath withIntermediateDirectories:YES attributes:nil error:NULL];
}

只有这种笨拙的方法fileExistsAtPath也会查找文件,而不仅仅是目录.但对我来说,危险的是:如果出现问题怎么办?我该怎么办?什么是确保创建目录的最佳实践,并且只在目录不存在时创建?

我知道文件系统操作从来都不安全.该设备可能会在开始从A铲到B的瞬间突然失go 电池电量.或者,它可能会偶然发现一个坏的钻头并挂起一秒钟.也许在某些情况下,即使没有目录,它也会返回YES.简单地说:我不信任文件系统操作.

我怎样才能保证绝对安全?

推荐答案

实际上,你可以跳过if,尽管苹果的文档说目录must not存在,但只有当你通过withIntermediateDirectories:NO时才是这样

这就归结为一个电话.下一步是捕获任何错误:

NSError * error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:bundlePath
                          withIntermediateDirectories:YES
                                           attributes:nil
                                                error:&error];
if (error != nil) {
    NSLog(@"error creating directory: %@", error);
    //..
}

如果目录已经存在,这将导致错误.

Objective-c相关问答推荐

UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有什么区别?

让 iPhone sleeping

UISearchbar 键盘搜索按钮操作

iOS 指定初始化器:使用 NS_DESIGNATED_INITIALIZER

将 CFDictionaryRef 转换为 NSDictionary?

使用自动布局以编程方式更改框架

iOS - 应用程序关闭时的核心位置和地理围栏

对 nil 对象进行快速枚举

iOS:将 URL 解析为段

观察 UIDatePicker 的变化

你如何安排一个块在下一次运行循环迭代中运行?

如果目录不存在,是否有更安全的方法来创建目录?

iPhone 键盘、完成按钮和 resignFirstResponder

iOS 设备作为 Web 服务器

何时在 iPhone 上使用 UIView 与 UIViewController?

在objective c中以自定义格式获取当前时间

如何在 xcode 项目中启用/禁用 ARC?

UIImage上的圆角

iOS:开源 VoIP/SIP Objective-C 代码

如何在对象内使用 objc_setAssociatedObject/objc_getAssociatedObject?