首页 > 解决方案 > 使用 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 对象?任何帮助是极大的赞赏。

标签: objective-cmacoscocoansfilewrapper

解决方案


考虑不要NSFileWrapper用于大型数据文件。用于NSFileWrapper目录结构,但直接写入大数据文件(open, write, ...)。

此外,不要羞于自己创建目录结构。一个包可以很简单,从字面上看,就是一个带有扩展名的文件夹。还有大量的 OO API ( NSURL, NSFileManager, ...) 可以帮助您检查和操作其内容。

祝你好运!


推荐阅读