如何使用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 }()