don*_*ile 38 filesystems objective-c nsfilemanager ios nsdocumentdirectory
如果目录不存在,我发现了这种创建目录的方法.但它看起来有点不稳定,我担心这可能会在1000次尝试中出现错误.
if(![[NSFileManager defaultManager] fileExistsAtPath:bundlePath]) {
[[NSFileManager defaultManager] createDirectoryAtPath:bundlePath withIntermediateDirectories:YES attributes:nil error:NULL];
}
Run Code Online (Sandbox Code Playgroud)
只有这个笨拙的方法fileExistsAtPath也可以查找文件,而不仅仅是目录.但对我来说,危险的是:如果这出错怎么办?我该怎么办?保证创建目录的最佳做法是什么,只有在目录不存在时才创建?
我知道文件系统操作永远不会安全.设备可能会在它开始从A到B的位置时突然耗尽电池电量.或者它会偶然发现一个坏位并挂了一秒钟.也许在一些很少的情况下,即使没有目录,它也会返回YES.简单地说:我不相信文件系统操作.
我怎样才能绝对安全?
e.J*_*mes 79
实际上你可以跳过if,即使Apple的文档说该目录不能存在,只有你通过时才会这样withIntermediateDirectories:NO
这归结为一个电话.下一步是捕获任何错误:
NSError * error = nil;
[[NSFileManager defaultManager] createDirectoryAtPath:bundlePath
withIntermediateDirectories:YES
attributes:nil
error:&error];
if (error != nil) {
NSLog(@"error creating directory: %@", error);
//..
}
Run Code Online (Sandbox Code Playgroud)
如果目录已存在,则不会导致错误.
斯威夫特 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)")
}
Run Code Online (Sandbox Code Playgroud)
对于Swift 3.0
do {
try FileManager.default.createDirectory(atPath: folder, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error)
}
Run Code Online (Sandbox Code Playgroud)
小智 5
斯威夫特 5.0
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let docURL = URL(string: documentsDirectory)!
let dataPath = docURL.appendingPathComponent("MyFolder")
if !FileManager.default.fileExists(atPath: dataPath.absoluteString) {
do {
try FileManager.default.createDirectory(atPath: dataPath.absoluteString, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error.localizedDescription);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23934 次 |
| 最近记录: |