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

| 如果目录不存在,我已经找到了创建目录的这种方式。但是它看起来有点不稳,我担心这在1000次尝试中就有1次出错。
if(![[NSFileManager defaultManager] fileExistsAtPath:bundlePath]) {
    [[NSFileManager defaultManager] createDirectoryAtPath:bundlePath withIntermediateDirectories:YES attributes:nil error:NULL];
}
只有这个笨拙的方法fileExistsAtPath可以查找文件,而不仅仅是目录。但是对我来说,危险的是:如果这出了错怎么办?我该怎么办?有什么最佳实践来保证目录已创建,并且仅在目录不存在时才创建? 我知道文件系统操作永远都不安全。设备可能会在刚开始将钻头从A铲到B的那一刻突然失去电池电量。或者它可能会偶然碰到坏的钻头并挂一秒钟。在某些情况下,即使没有目录,它也可能返回YES。简而言之:我不信任文件系统操作。 我怎样才能使它绝对安全?     
已邀请:
您实际上可以跳过ѭ1,即使Apple的文档说该目录一定不存在,也只有在传递ѭ2时才是正确的 这样一来就可以打电话。下一步是捕获任何错误:
NSError * error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:bundlePath
                          withIntermediateDirectories:YES
                                           attributes:nil
                                                error:&error];
if (error != nil) {
    NSLog(@\"error creating directory: %@\", error);
    //..
}
如果目录已经存在,则不会导致错误。     
对于Swift 3.0
do {
    try FileManager.default.createDirectory(atPath: folder, withIntermediateDirectories: true, attributes: nil)
} catch {
    print(error)
}
    
NSFileManager *fileManager= [NSFileManager defaultManager]; 
if(![fileManager fileExistsAtPath:directory isDirectory:&isDir])
    if(![fileManager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:NULL])
        NSLog(@\"Error: Create folder failed %@\", directory);
从这里的SO主题开始。 创建目录后,您可以刷新文件系统,然后检查新创建的目录是否存在。这可能是过大的杀伤力,但是您绝对不能有太多的过大杀伤力。     
斯威夫特4.2
let fileManager = FileManager.default
let documentsURL =  fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!

let imagesPath = documentsURL.appendingPathComponent(\"Images\")
do
{
    try FileManager.default.createDirectory(atPath: imagesPath.path, withIntermediateDirectories: true, attributes: nil)
}
catch let error as NSError
{
    NSLog(\"Unable to create directory \\(error.debugDescription)\")
}
    
在swift 2中,它看起来像这样:
do {
    try NSFileManager.defaultManager().createDirectoryAtPath(pathURL.absoluteString, withIntermediateDirectories: true, attributes: nil)
} catch {
    print(error)
}
    

要回复问题请先登录注册