2017-02-10 199 views
0

我在使用Swift 3在iOS中創建臨時目錄時遇到問題。我從FileManager.temporaryDirectory獲取臨時目錄URL,並嘗試使用FileManager.createDirectory創建目錄,但該目錄沒有似乎存在,我無法在其中創建文件。我究竟做錯了什麼?無法創建臨時目錄

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

這將產生輸出:

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

您不必創建目錄,它已經存在。 –

+0

你也應該看看http://stackoverflow.com/questions/16176911/nsurl-path-vs-absolutestring –

回答

3

tempDirString字符串要傳遞到fileManager.fileExists(atPath: tempDirString)包含字符串,但該字符串不是一個文件路徑。它是用於人類可讀目的的描述,而不是用於機器可讀的目的。事實上,它甚至不是一個有效的URL字符串(注意它的空間!)。

如果你想要的路徑,替換此行:

let tempDirString = String(describing: tempDir) 

,而是分配給tempDirString的NSURL的path函數的結果得到的路徑作爲一個字符串:

let tempDirString = tempDir.path 

參見: https://developer.apple.com/reference/foundation/nsurl/1408809-path