objective-c - 使用 NSFileWrapper 时,有没有办法通过多次写入 NSData 对象块来处理巨大的输出文件?
问题描述
我是一个 macOS Cocoa 应用程序,我需要以我的应用程序专有格式保存一个 Bundle。出于这个原因,我决定查看 NSFileWrapper ,它似乎是处理该问题的最干净的解决方案。我的代码如下所示:
NSFileWrapper *bundleFileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
NSDictionary *fileWrappers = [bundleFileWrapper fileWrappers];
if ([fileWrappers objectForKey:mboxFileName] == nil) {
NSFileWrapper *textFileWrapper = [[NSFileWrapper alloc] initRegularFileWithContents:mboxData];
[textFileWrapper setPreferredFilename:mboxFileName];
[bundleFileWrapper addFileWrapper:textFileWrapper];
}
NSError *error;
BOOL success = [bundleFileWrapper writeToURL:[NSURL fileURLWithPath:path] options:NSFileWrapperWritingAtomic originalContentsURL:NULL error:&error];
NSLog(@"Error = %@",[error localizedDescription]);
我的问题是我最终使用了非常大的 NSData 对象,这种方法需要大量内存。有没有办法使用 NSFileWrapper 按顺序编写小的 NSData 对象?任何帮助是极大的赞赏。
解决方案
考虑不要NSFileWrapper
用于大型数据文件。用于NSFileWrapper
目录结构,但直接写入大数据文件(open
, write
, ...)。
此外,不要羞于自己创建目录结构。一个包可以很简单,从字面上看,就是一个带有扩展名的文件夹。还有大量的 OO API ( NSURL
, NSFileManager
, ...) 可以帮助您检查和操作其内容。
祝你好运!
推荐阅读
- javacard - 如何在智能卡上定义我自己的安全域?
- javascript - Azure 应用程序客户端 ID 是否可以安全地存储在前端?
- javascript - 在这个特定的脚本中,什么方法减少理解为累加器
- python - 使用 matplotlib 在 2d 或 3d 中绘制矩阵方程
- php - 如何从另一个表的结果中插入表名
- git - 克隆成功,但由于路径无效,签出失败。什么是路径问题?
- javascript - React Hooks useState Array 为空,在组件中呈现状态
- python - 返回已发送电子邮件的时间和日期 - IMAP
- c# - C# 使用数据库值更新组合框
- prolog - 如果序言中不存在事实,请使用规则?