web-dev-qa-db-fra.com

Créer un répertoire dans Swift 3.0

Je suis un nouvel étudiant en 9ème année Swift , créant un projet d'école.

J'essaie de créer un répertoire dans lequel je veux enregistrer un fichier numérisé au format pdf.

Lors de la création du répertoire, je reçois une erreur ci-dessous.

Erreur 1: 

Impossible d'utiliser le membre de l'instance 'filemgr' dans l'initializer de la propriété; les initialiseurs de propriété s'exécutent avant que 'self' soit disponible.

Erreur 2:

Déclaration attendue 

Code:

let filemgr = FileManager.default


let dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)

let docsURL = dirPaths[0]

let newDir = docsURL.appendingPathComponent("data").path

do{
    try filemgr.createDirectory(atPath: newDir,withIntermediateDirectories: true, attributes: nil)
} catch {
    print("Error: \(error.localizedDescription)")
}

Aidez-moi à résoudre ce problème.

Merci.

13
Neeld

Pls, écris ce code:

Swift 4.0 Et Swift 3.0  

let documentsPath1 = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0])
let logsPath = documentsPath1.appendingPathComponent("data")
do 
{
    try FileManager.default.createDirectory(atPath: logsPath!.path, withIntermediateDirectories: true, attributes: nil)
} 
catch let error as NSError 
{
    NSLog("Unable to create directory \(error.debugDescription)")
} 
24
Pragnesh Vitthani

Pour Swift 4.0 Veuillez utiliser ceci 

    let fileManager = FileManager.default
    if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first {
        let filePath =  tDocumentDirectory.appendingPathComponent("\(FOLDER_NAME)") 
        if !fileManager.fileExists(atPath: filePath.path) {
            do {
                try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil)
            } catch {
                NSLog("Couldn't create document directory")
            }
        }
        NSLog("Document directory is \(filePath)")
    }
27
Avinash

Pour Swift 4.0 , j'ai créé l'extension suivante à partir de URL qui permet la création d'un dossier à partir du répertoire de documents dans l'application.

import Foundation

extension URL {
    static func createFolder(folderName: String) -> URL? {
        let fileManager = FileManager.default
        // Get document directory for device, this should succeed
        if let documentDirectory = fileManager.urls(for: .documentDirectory,
                                                    in: .userDomainMask).first {
            // Construct a URL with desired folder name
            let folderURL = documentDirectory.appendingPathComponent(folderName)
            // If folder URL does not exist, create it
            if !fileManager.fileExists(atPath: folderURL.path) {
                do {
                    // Attempt to create folder
                    try fileManager.createDirectory(atPath: folderURL.path,
                                                    withIntermediateDirectories: true,
                                                    attributes: nil)
                } catch {
                    // Creation failed. Print error & return nil
                    print(error.localizedDescription)
                    return nil
                }
            }
            // Folder either exists, or was created. Return URL
            return folderURL
        }
        // Will only be called if document directory not found
        return nil
    }
}

Si le dossier souhaité n'existe pas, il le créera. Ensuite, en supposant que le dossier existe, il renvoie la URL à l'utilisateur. Sinon, si cela échoue, alors nil est renvoyé.

Par exemple, pour créer le dossier "MyStuff", appelez-le ainsi:

let myStuffURL = URL.createFolder(folderName: "MyStuff")

Cela retournerait:

fichier: /// var/mobile/Conteneurs/Données/Application/4DE0A1C0-8629-47C9-87D7-C2B4F3A16D24/Documents/MyStuff /

Vous pouvez également créer des dossiers imbriqués avec les éléments suivants:

let myStuffHereURL = URL.createFolder(folderName: "My/Stuff/Here")

Ce qui vous donne:

fichier: /// var/mobile/Conteneurs/Données/Application/4DE0A1C0-8629-47C9-87D7-C2B4F3A16D24/Documents/Mon/Stuff/Ici /

10
CodeBender

Vous obtenez cela parce que vous attribuez une valeur à une instance newDir au mauvais endroit. 

J'ai écrit votre code dans viewDidLoad et cela fonctionne parfaitement.

 enter image description here

0
pkc456