2017-02-10 8 views
0

Ich habe Probleme beim Erstellen eines temporären Verzeichnisses in iOS mit Swift 3. Ich bekomme die temporäre Verzeichnis-URL von FileManager.temporaryDirectory und versuche, das Verzeichnis mit FileManager.createDirectory zu erstellen, aber das Verzeichnis nicht scheinbar existieren und ich kann keine Dateien darin erstellen. Was mache ich falsch?Kann temporäres Verzeichnis nicht erstellen

let fileManager = FileManager.default 
let tempDir = fileManager.temporaryDirectory 
let tempDirString = String(describing: tempDir) 
print("tempDir: \(tempDir)") 
print("tempDirString: \(tempDirString)") 
if fileManager.fileExists(atPath: tempDirString) { 
    print("tempDir exists") 
} else { 
    print("tempDir DOES NOT exist") 
    do { 
     try fileManager.createDirectory(at: tempDir, withIntermediateDirectories: true, attributes: nil) 
     print("tempDir created") 
     if fileManager.fileExists(atPath: tempDirString) { 
      print("tempDir exists") 
     } else { 
      print("tempDir STILL DOES NOT exist") 
     } 
    } catch { 
     print("tempDir NOT created") 
    } 
} 

Dies erzeugt die Ausgabe:

tempDir: file:///private/var/mobile/Containers/Data/Application/D28B9C5E-8289-4C1F-89D7-7E9EE162AC27/tmp/ 
tempDirString: file:///private/var/mobile/Containers/Data/Application/ D28B9C5E-8289-4C1F-89D7-7E9EE162AC27/tmp/ 
tempDir DOES NOT exist 
tempDir created 
tempDir STILL DOES NOT exist 
+0

Sie müssen das Verzeichnis nicht erstellen, es ist bereits vorhanden. –

+0

sollten Sie auch einen Blick auf http://stackoverflow.com/questions/16176911/nsurl-path-vs-absolutstring werfen –

Antwort

3

Die tempDirString Zeichenfolge, die Sie vorbei an fileManager.fileExists(atPath: tempDirString) eine Zeichenfolge enthält, aber die Zeichenfolge ist kein Dateipfad. Es ist eine Beschreibung für lesbare Zwecke, nicht für maschinenlesbare Zwecke. Tatsächlich ist es nicht einmal eine gültige URL-Zeichenfolge (beachten Sie den Platz darin!).

Wenn Sie den Pfad möchten, ersetzen Sie diese Zeile:

let tempDirString = String(describing: tempDir) 

und stattdessen tempDirString die Ergebnisse der path Funktion des NSURL zuweisen den Pfad als String zu erhalten:

let tempDirString = tempDir.path 

Siehe auch: https://developer.apple.com/reference/foundation/nsurl/1408809-path

Verwandte Themen