快速删除文本文件:这些文件是否真的被删除?
问题描述:
我用下面的代码来删除文件存储文件:快速删除文本文件:这些文件是否真的被删除?
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可能来自它们)
我的问题是:
我的代码真的会删除文件吗?或者,也许只是删除对它的引用,所以内存不能被释放?
答
或者,也许只是删除对它的引用,所以内存不能被释放?
这个。这是大多数(全部)现代存储工作的方式。在iOS中,您正在写入闪存,所以原始数据将一直存在,直到调用被调用(IIRC)。您甚至不能保证写入该文件会覆盖旧数据,存储控制器可以将新数据放在任何地方,而这在闪存中尤其如此。这就是为什么“NAND attack”存在。
看一看[这个答案](http://stackoverflow.com/questions/7547517/how-to-securely-erase-a-file-in-ios) –
当你下载并检查容器,如何它是多大?您是否确保刷新使用情况页面(应用程序的使用情况不会自动更新)。它应该在使用'removeItem'之后下降;这是一个相当标准的Unix文件系统。这可能会给你带来高分,但我的经验并没有发现这种情况。 –
容器不是那么大,像400 kb,这就是为什么它让我想知道为什么设置显示这么大的数字 – DCDC