快速删除文本文件:这些文件是否真的被删除?

问题描述:

我用下面的代码来删除文件存储文件:快速删除文本文件:这些文件是否真的被删除?

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://*.com/questions/7547517/how-to-securely-erase-a-file-in-ios) –

+0

当你下载并检查容器,如何它是多大?您是否确保刷新使用情况页面(应用程序的使用情况不会自动更新)。它应该在使用'removeItem'之后下降;这是一个相当标准的Unix文件系统。这可能会给你带来高分,但我的经验并没有发现这种情况。 –

+0

容器不是那么大,像400 kb,这就是为什么它让我想知道为什么设置显示这么大的数字 – DCDC

或者,也许只是删除对它的引用,所以内存不能被释放?

这个。这是大多数(全部)现代存储工作的方式。在iOS中,您正在写入闪存,所以原始数据将一直存在,直到调用被调用(IIRC)。您甚至不能保证写入该文件会覆盖旧数据,存储控制器可以将新数据放在任何地方,而这在闪存中尤其如此。这就是为什么“NAND attack”存在。

+0

那么,那么如何防止过度的压力?是否有任何方法来保持它的大小相当固定创建/删除文件? – DCDC

+0

啊......做你正在做的事情,如果你只是想节省空间,是的,这是做到这一点的方法。会发生什么情况是,当驱动器开始充满时,驱动器控制器将开始重新使用单元。这是驱动器填满时变慢的原因之一,但不是唯一的原因。 –

+0

为什么设置会在文件涉嫌删除时继续显示文档和数据20mb?我如何确定该文件被正确删除? – DCDC