How to create directory using Swift code (NSFileManager)
Swift 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.path) { do { try FileManager.default.createDirectory(atPath: dataPath.path, withIntermediateDirectories: true, attributes: nil) } catch { print(error.localizedDescription) }}
Swift 4.0
let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)let documentsDirectory: AnyObject = paths[0] as AnyObjectlet dataPath = documentsDirectory.appendingPathComponent("MyFolder")! do { try FileManager.default.createDirectory(atPath: dataPath.absoluteString, 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)}
Swift 2.1
You can create directory using below method:
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)}
None of @Kampai and @Crashalot's answers worked for me.
The .absoluteString makes a url with file:// prefix and it cause exception while creating directory. Instead I've used .path method.
The fixed code for 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)")}
The accepted answer no longer compiles as the line with appendingPathComponent
generates an error.
Here's a Swift 3 version that compiles:
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)") }}