iosmobiledirectoryswift4document-directory

How can i copy Folder from Project to Document Directory ios swift


Here is my Folder Structure

enter image description here

I want to copy this Stickers folder to Document Directory for this purpose i have used following code

    let fileManager = FileManager.default

    let documentsUrl = fileManager.urls(for: .documentDirectory,
                                        in: .userDomainMask)

    guard documentsUrl.count != 0 else {
        return // Could not find documents URL
    }

    let finalDatabaseURL = documentsUrl.first!.appendingPathComponent("Stickers")

    if !( (try? finalDatabaseURL.checkResourceIsReachable()) ?? false) {
        print("DB does not exist in documents folder")

        let documentsURL = Bundle.main.resourceURL?.appendingPathComponent("Stickers")

        do {
            try fileManager.copyItem(atPath: (documentsURL?.path)!, toPath: finalDatabaseURL.path)
        } catch let error as NSError {
            print("Couldn't copy file to final location! Error:\(error.description)")
        }

    } else {
        print("Database file found at path: \(finalDatabaseURL.path)")
    }

but it won't work. I am getting an Error as

enter image description here

NOTE: If Copying folder is not possible then i want to copy Assets.xcassets to Document Directory. How can i achieve it?


Solution

  • Please below code.. I update your code in two functions to copy all files from folder to document directory.

    Hope it will work.

    func copyFolders() {
        let fileManager = FileManager.default
    
        let documentsUrl = fileManager.urls(for: .documentDirectory,
                                            in: .userDomainMask)
    
        guard documentsUrl.count != 0 else {
            return // Could not find documents URL
        }
    
        let finalDatabaseURL = documentsUrl.first!.appendingPathComponent("Stickers")
    
        if !( (try? finalDatabaseURL.checkResourceIsReachable()) ?? false) {
            print("DB does not exist in documents folder")
    
            let documentsURL = Bundle.main.resourceURL?.appendingPathComponent("Stickers")
    
            do {
                if !FileManager.default.fileExists(atPath:(finalDatabaseURL?.path)!)
                {
                    try FileManager.default.createDirectory(atPath: (finalDatabaseURL.path), withIntermediateDirectories: false, attributes: nil)
                }
                copyFiles(pathFromBundle: (documentsURL?.path)!, pathDestDocs: finalDatabaseURL.path)
            } catch let error as NSError {
                print("Couldn't copy file to final location! Error:\(error.description)")
            }
    
        } else {
            print("Database file found at path: \(finalDatabaseURL.path)")
        }
    
    }
    
    func copyFiles(pathFromBundle : String, pathDestDocs: String) {
        let fileManagerIs = FileManager.default
        do {
            let filelist = try fileManagerIs.contentsOfDirectory(atPath: pathFromBundle)
            try? fileManagerIs.copyItem(atPath: pathFromBundle, toPath: pathDestDocs)
    
            for filename in filelist {
                try? fileManagerIs.copyItem(atPath: "\(pathFromBundle)/\(filename)", toPath: "\(pathDestDocs)/\(filename)")
            }
        } catch {
            print("\nError\n")
        }
    }