我正在尝试以编程方式获取我的应用程序的大小。该应用程序下载大量音频文件,我正在尝试检查当我删除文件时,应用程序的大小是否按预期减小。到目前为止,我唯一知道如何做到这一点的方法是查看iPad的设置,但那里的数字似乎并不总是正确的。
func getAppSize(){
let paths : NSArray = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
var errorP = NSErrorPointer()
let pathDictionary: NSDictionary = NSFileManager.defaultManager().attributesOfFileSystemForPath(paths.firstObject as String, error: errorP)!
if(pathDictionary.count != 0){
var fileSystemSizeInBytes: Double = pathDictionary.objectForKey("NSFileSystemSize") as Double
var fileSystemSizeInMegaBytes : Double = fileSystemSizeInBytes/1000000
println("Total Space: \(fileSystemSizeInMegaBytes) MB")
}else{
}
}
目前我只使用文件系统属性密钥来获取文件系统大小,本来以为这是我的当前应用程序的大小,但由于它返回了249 GB,显然它正在读取整个MacBook文件系统大小,而不是模拟器的文档路径。
我查看了其他属性密钥选项,发现:
let NSFileSystemSize: NSString!
let NSFileSystemFreeSize: NSString!
let NSFileSystemNodes: NSString!
let NSFileSystemFreeNodes: NSString!
let NSFileSystemNumber: NSString!
然而,我还没有找到一个指定我的应用程序实际占用空间大小的关键字。我在考虑也许有一种方法可以获取所有节点,然后将它们的大小相加,但我不太确定如何做到这一点。
编辑:所以bundle似乎给了我我的应用程序大小,但没有我保存到文档路径中的任何mp3文件。我猜我可能保存它们到了错误的位置或其他什么地方,这里是我如何将它们保存到应用程序的简化版本。
//Make HTTP Request Ect... before here...
if(data.length > 1000){
let documentPath = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let uuid = NSUUID().UUIDString
let localUrl = uuid + ".mp3"
let destPath = (documentPath[0] as String) + "/" + localUrl
data.writeToFile(destPath, atomically: true)
var error: NSErrorPointer = nil
data.writeToFile(destPath, options: NSDataWritingOptions.DataWritingAtomic, error: error)
if(error != nil){
println("data write error: \(error.memory?.localizedDescription)")
}
}