带有大文件的NSDocument FileWrappers的磁盘空间使用过多

时间:2018-11-15 07:46:40

标签: macos nsdocument nsfilewrapper nsdocumentcontroller

我们的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的磁盘空间。

现在尝试编写一个小示例应用程序来演示该问题。

0 个答案:

没有答案