2016-09-22 86 views
3

我用下面的代碼來刪除文件存儲文件:快速刪除文本文件:這些文件是否真的被刪除?

class func removeFile(_ itemName:String, fileExtension: String) { 
    let fileManager = FileManager.default 
    let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory 
    let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask 
    let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) 
    guard let dirPath = paths.first else { 
     return 
    } 
    let filePath = "\(dirPath)/\(itemName)" 
    do { 
     try fileManager.removeItem(atPath: filePath) 
     print("remove done") 
    } catch let error as NSError { 
     print(error.debugDescription) 
    } 
} 

一切正常,文件從文件目錄中刪除(我下載並檢查容器),

檢查時出現問題我發現當我刪除這些txt文件時,應用程序的大小並沒有縮小(它們非常大,比如4,5 MB,因此這個數據文件中的11.7 MB可能來自它們)

enter image description here

我的問題是:

我的代碼真的會刪除文件嗎?或者,也許只是刪除對它的引用,所以內存不能被釋放?

+0

看一看[這個答案](http://stackoverflow.com/questions/7547517/how-to-securely-erase-a-file-in-ios) –

+0

當你下載並檢查容器,如何它是多大?您是否確保刷新使用情況頁面(應用程序的使用情況不會自動更新)。它應該在使用'removeItem'之後下降;這是一個相當標準的Unix文件系統。這可能會給你帶來高分,但我的經驗並沒有發現這種情況。 –

+0

容器不是那麼大,像400 kb,這就是爲什麼它讓我想知道爲什麼設置顯示這麼大的數字 – DCDC

回答

1

或者,也許只是刪除對它的引用,所以內存不能被釋放?

這個。這是大多數(全部)現代存儲工作的方式。在iOS中,您正在寫入閃存,所以原始數據將一直存在,直到調用被調用(IIRC)。您甚至不能保證寫入該文件會覆蓋舊數據,存儲控制器可以將新數據放在任何地方,而這在閃存中尤其如此。這就是爲什麼「NAND attack」存在。

+0

那麼,那麼如何防止過度的壓力?是否有任何方法來保持它的大小相當固定創建/刪除文件? – DCDC

+0

啊......做你正在做的事情,如果你只是想節省空間,是的,這是做到這一點的方法。會發生什麼情況是,當驅動器開始充滿時,驅動器控制器將開始重新使用單元。這是驅動器填滿時變慢的原因之一,但不是唯一的原因。 –

+0

爲什麼設置會在文件涉嫌刪除時繼續顯示文檔和數據20mb?我如何確定該文件被正確刪除? – DCDC