领域(Realm):如何获取数据库当前大小

8
有没有Realm API方法可以使用RealmSwift作为数据存储来获取我RealmSwift应用程序的当前数据库大小?这样我就可以在应用程序中显示该信息(例如统计信息)。
提前致谢
约翰
2个回答

9

Realm的API没有提供这样的方法。但是,为了这些目的,似乎使用Foundation的NSFileManager API就足够了。

let realm = …
let path = realm.configuration.fileURL!.path
let attributes = try! NSFileManager.defaultManager().attributesOfItemAtPath(path!)
let fileSize = attributes.fileSize()

请注意:所报告的文件大小并非完全由数据占用。出于性能原因,Realm事先获取更多磁盘空间。如果您想要实际存储数据的磁盘使用情况,您需要首先编写一个压缩副本,并可以测量该副本,但这似乎是为了将其报告给最终用户而误导,并会影响性能。
更新: 自版本0.99+以来,Realm使用NSURL进行路径处理。示例代码已相应更改。

2
嗨,马里乌斯。非常感谢您的快速响应。对我来说完美无缺。只是顺便提一下:attributes.filesize不存在(也许只有在Swift 2.0中)。但我找到了一个方法,可以通过filesize作为键获取该值。 let fileSize = attributes[NSFileSize] as! NSNumber 所以再次感谢您。干杯。约翰 - John B.
嗨 John,很高兴它起作用了。那是一个打字错误。fileSize() 应该可以工作,因为它在 NSDictionary 的类别中公开为方法。 - marius
这是什么结果?我的结果是 32768.0,这是字节吗?所以大约是32KB? - David Seek
是的,这是以字节为单位的大小。如果您想了解更多关于为什么是32KB的原因,您可以在此答案中了解有关文件大小增长的更多信息 - marius

8

Swift 3 的更新版本

func checkRealmFileSize() {
    if let realmPath = Realm.Configuration.defaultConfiguration.fileURL?.relativePath {
        do {
            let attributes = try FileManager.default.attributesOfItem(atPath:realmPath)
            if let fileSize = attributes[FileAttributeKey.size] as? Double {

                print(fileSize)
            }
        }
        catch (let error) {
            print("FileManager Error: \(error)")
        }
    }
}

这是什么结果?我的结果是 32768.0,这是字节吗?所以大约是32KB? - David Seek
1
@DavidSeek 这是字节。 - Lucy Jeong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接