How to create directory using Swift code (NSFileManager) How to create directory using Swift code (NSFileManager) ios ios

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)")    }}