При использовании NSFileWrapper, есть ли способ обрабатывать огромные выходные файлы, записывая несколько раз кусками объектов NSData? - PullRequest
0 голосов
/ 04 декабря 2018

Я являюсь приложением macOS Cocoa, мне нужно сохранить пакет в собственном формате приложения.По этой причине я решил взглянуть на 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 в последовательности?Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 06 декабря 2018

Не используйте NSFileWrapper для ваших больших файлов данных.Используйте NSFileWrapper для структуры каталогов, но пишите большие файлы данных напрямую (open, write, ...).

Кроме того, не стесняйтесь просто создать структуру каталогов самостоятельно.Пакет может быть таким же простым, как и папка с расширением.И до сих пор существует множество OO API (NSURL, NSFileManager, ...), которые помогут вам исследовать и манипулировать его содержимым.

Удачи!

...