2016-10-23 94 views
1

好吧,這個讓我撓了一陣頭腦。從磁盤加載文件問題

我有一個png文件,我寫出到磁盤。我通過以下方式獲取數據:

let data = UIImagePNGRepresentation(scaledImage!) 
let filename = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png") 

我做了一個嘗試,並且一切似乎都奏效。由此產生的文件名是:

file:///var/mobile/Containers/Data/Application/C6B796E8-2DB6-45A4-9B18-EF808B8CA3CA/Documents/580420d51800cd826a7e217c.png 

問題出在我嘗試從磁盤加載該映像時。

當我得到的所有文件中的文件目錄列表我得到:

[file:///private/var/mobile/Containers/Data/Application/C6B796E8-2DB6-45A4-9B18-EF808B8CA3CA/Documents/580420d51800cd826a7e217c.png] 

我能看到的唯一區別是文件路徑的「私人」的一部分。當我嘗試使用文件路徑檢查文件是否存在時,我從追加文件名(沒有私人部分的文件名)開始返回。

我錯過了什麼?

+0

檢查答案 –

+0

難道它幫你,它在我的情況 –

回答

-1

斯威夫特3/4碼

讓我們假設如下

func getDocumentsDirectory() -> URL { 
     let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 
     let documentsDirectory = paths[0] 
     return documentsDirectory 
} 

爲了保存圖像

let data = UIImagePNGRepresentation(scaledImage!) 
let filename = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png") 
try? data?.write(to: filename) 

而且方法getDocumentsDirectory()定義你的圖像是sa VED在Documents目錄

現在爲了載入它

let imagePath = getDocumentsDirectory().appendingPathComponent("\(record.uid!).png").path 

let fileManager = FileManager.default 
if fileManager.fileExists(atPath: imagePath){ 
    print("Image Present") 
    //load it in some imageView 
}else { 
    print("No Image") 
} 
+0

工作的罰款你是缺少了這一點。在你的代碼中打印出你的url,你會看到這個問題:在imagePath中沒有領先的「private」。 – Jeyhey

+0

OP沒有發佈他的'getDocumentsDirectory()'函數的主體,所以我假設它是一樣的。我的網址是: 在設備上測試 - 打印文件名說明: '「/// var/mobile/Containers/Data/Application/46B10A6C-43EE-4D11-83E5-88B6ADF1E646/Documents/testImage.png」' 的ImagePath的印刷描述: ' 「/var/mobile/Containers/Data/Application/46B10A6C-43EE-4D11-83E5-88B6ADF1E646/Documents/testImage.png」' 所以,我認爲有一些問題' getDocumentsDirectory()'函數的正文,使得URL在返回時被私有引導。這是一個假設。 –