How to create directory using Swift code (NSFileManager)

前端 未结 8 2059
一个人的身影
一个人的身影 2020-12-23 12:49

I\'m having some trouble with converting Objective-C code to create a directory for Swift.

Objective-C:

    NSArray *paths = NSSearchPathForDirectori         


        
相关标签:
8条回答
  • 2020-12-23 12:58

    Simpler solution:

    "~/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}
    }
    
    0 讨论(0)
  • 2020-12-23 13:05

    Swift 4 :

    NSSearchPathForDirectoriesInDomains returns an array of strings, not URLs.

    appendingPathComponent to string makes app crash with the message -[NSPathStore2 URLByAppendingPathComponent:]: unrecognized selector sent to instance

    Here's a Swift 4 version that compiles:

        let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
        if let pathURL = URL.init(string: paths[0]) {
            let dataURL = pathURL.appendingPathComponent("MyFolder")
            do {
                try FileManager.default.createDirectory(atPath: dataURL.absoluteString, withIntermediateDirectories: true, attributes: nil)
            } catch let error as NSError {
                print(error.localizedDescription);
            }
        }
        else {
            print("Error in getting path URL");
        }
    
    0 讨论(0)
  • 2020-12-23 13:06

    Swift 5

    guard let path = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first else { return }
        if let pathURL = URL.init(string: path) {
            let dataURL = pathURL.appendingPathComponent("MyFolderName")
            do {
                try FileManager.default.createDirectory(atPath: dataURL.absoluteString, withIntermediateDirectories: true, attributes: nil)
            } catch let error as NSError {
                print(error.localizedDescription);
            }
        }
        else {
            print("Error in URL path");
        }
    
    0 讨论(0)
  • 2020-12-23 13:10

    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)")
        }
    }
    
    0 讨论(0)
  • 2020-12-23 13:11

    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.absoluteString) {
        do {
            try FileManager.default.createDirectory(atPath: dataPath.absoluteString, 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 AnyObject
    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 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);
    }
    
    0 讨论(0)
  • 2020-12-23 13:18

    For Other developers, Im gonna leave this here as it may help someone like me looking for a way to figure out where the folder is being created.

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray
    let documentsDir = paths.firstObject as String
    println("Path to the Documents directory\n\(documentsDir)")
    
    0 讨论(0)
提交回复
热议问题