如何解决如果目录不存在,是否有更安全的方法来创建目录?
| 如果目录不存在,我已经找到了创建目录的这种方式。但是它看起来有点不稳,我担心这在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 举报,一经查实,本站将立刻删除。