如何使用Swift代码创build目录(NSFileManager)
我在转换Objective-C代码以创buildSwift目录时遇到了一些麻烦。
Objective-C的:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/MyFolder"]; if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
编辑swift 2.1
您可以使用下面的方法创build目录:
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) let documentsDirectory: AnyObject = paths[0] let dataPath = documentsDirectory.stringByAppendingPathComponent("MyFolder") do { try NSFileManager.defaultManager().createDirectoryAtPath(dataPath, withIntermediateDirectories: false, attributes: nil) } catch let error as NSError { print(error.localizedDescription); }
编辑Swift 3.0
let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let documentsDirectory: AnyObject = paths[0] let dataPath = documentsDirectory.appendingPathComponent("MyFolder")! do { try FileManager.default.createDirectory(atPath: dataPath.absoluteString, withIntermediateDirectories: false, attributes: nil) } catch let error as NSError { print(error.localizedDescription); }
@Kampai和@ Crashalot的答案都不适合我。
.absoluteString使用file://前缀创build一个url,并在创build目录时导致exception。 相反,我用了.path方法。
Swift 3的固定代码
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let dataPath = documentsDirectory.appendingPathComponent("MyFolder") do { try FileManager.default.createDirectory(atPath: dataPath.path, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { print("Error creating directory: \(error.localizedDescription)") }
接受的答案不再编译,因为与appendingPathComponent
的行生成一个错误。
这是一个Swift 3版本,可以编译:
fileprivate func createDir(dirName: String) { let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let dataPath = documentsDirectory.appendingPathComponent(dirName) do { try FileManager.default.createDirectory(atPath: dataPath.absoluteString, withIntermediateDirectories: false, attributes: nil) } catch let error as NSError { printError("Error creating directory: \(error.localizedDescription)") } }
更简单的解决scheme
"~/Desktop/demo".expand.createDir()//Now you have a folder named demo on your desk extension String{ func createDir(_ path:String){ do { try FileManager.default.createDirectory(atPath: path, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { NSLog("Unable to create directory \(error.debugDescription)") } } var expand:String {return NSString(string: self).expandingTildeInPath} }
斯威夫特4
// DB Directory and Path lazy var applicationDocumentsDirectory: URL = { let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) let documentDirectoryURL = urls[urls.count - 1] as URL let dbDirectoryURL = documentDirectoryURL.appendingPathComponent("DB") if FileManager.default.fileExists(atPath: dbDirectoryURL.path) == false{ do{ try FileManager.default.createDirectory(at: dbDirectoryURL, withIntermediateDirectories: false, attributes: nil) }catch{ } } return dbDirectoryURL }()