Я думаю, что понял.Я должен был прочитать это в память маленькими кусочками (HAHA GET THE PUN?) И перенести это таким образом.Имейте в виду, что это работает только для файлов, а не для каталогов.Я протестировал его на 450 МБ файле, и он скопировал примерно за 3 минуты с тем же количеством байтов, что и у источника.Это было видео, и пока я транслировал его клиенту, я тоже мог его воспроизвести.Отличный, да?
Без лишних слов, вот код, который я использовал, слегка исправленный, чтобы сделать простое копирование файла, а не по сети.
[[NSFileManager defaultManager] createFileAtPath:@"/path/to/file/dest" contents:nil attributes:nil];
NSFileHandle *output = [NSFileHandle fileHandleForWritingAtPath:@"/path/to/file/dest"];
uint64 offset = 0;
uint32 chunkSize = 8192;
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:@"/path/to/file/source"];
NSAutoreleasePool *autoreleasePool = [[NSAutoreleasePool alloc] init];
NSData *data = [handle readDataOfLength:chunkSize];
NSLog(@"Entering Loop.");
while ([data length] > 0) {
[output seekToEndOfFile];
[output writeData:data];
offset += [data length];
NSLog(@"Switching Loop.");
[autoreleasePool release];
autoreleasePool = [[NSAutoreleasePool alloc] init];
[handle seekToFileOffset:offset];
data = [handle readDataOfLength:chunkSize];
}
NSLog(@"Exited Loop.");
[handle closeFile];
[autoreleasePool release];
[output closeFile];
[output release];