微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

| 如果目录不存在,我已经找到了创建目录的这种方式。但是它看起来有点不稳,我担心这在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,attributes: nil)
}
catch let error as NSError
{
    NSLog(\"Unable to create directory \\(error.debugDescription)\")
}
    ,在swift 2中,它看起来像这样:
do {
    try NSFileManager.defaultManager().createDirectoryAtPath(pathURL.absoluteString,attributes: nil)
} catch {
    print(error)
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。