我们的NSDocument应用程序使用FileWrappers将多个json和大型视频文件存储在Document Packages中。如果可能,我们希望使用NSDocuments的版本控制和还原功能。 json文件经常更改,而视频文件则不会更改。当我们为preservesVersion返回true时,保存这些文档包将导致使用过多的磁盘空间。对于每个文档的永久版本,整个包的完整副本都保存在系统目录中,即使视频文件没有更改也是如此。
我们这样覆盖NSDocument中的fileWrapper。
override func fileWrapper(ofType typeName: String) throws -> FileWrapper {
var fileWrappers = [String:FileWrapper]()
// Simple Txt File
let metaFileText = try packageMeta.serialize()
let metaFileData = metaFileText.data(using: .utf8) ?? Data()
let metaFileWrapper = FileWrapper(regularFileWithContents: metaFileData)
fileWrappers["file.meta"] = metaFileWrapper
// Very large Video directory
if let fileUrl = self.fileURL {
let videoWrapper = try FileWrapper(url: fileUrl.appendingPathComponent("Video"), options: [])
fileWrappers[DocumentPackage.VideoDirectory] = videoWrapper
}
return FileWrapper(directoryWithFileWrappers: fileWrappers)
}
有人可以建议我们限制磁盘空间使用的任何方法吗?我们希望能够获得NSDocument的所有优点,还原,自动保存等。我们只是想避免重复相同的大视频文件。
拥有20GB及更大的文档对我们来说很常见。在这种情况下,这些额外的备份副本会占用超过100GB的磁盘空间。
现在尝试编写一个小示例应用程序来演示该问题。