我尝试过NSTask> NSData方法,但是对于超过1GB的任何东西,CPU /内存开销都非常大,所以我需要找到一种方法来执行此操作,比如说,FTP服务器会这样做。
编辑:远程桌面的复制文件是如何做到的?
答案 0 :(得分:3)
我想我明白了。我不得不用小字节大小(HAHA GET THE PUN?)片段将它读入内存并通过这种方式传输。请记住,这仅适用于文件,而不适用于目录。我在一个450MB的文件上对它进行了测试,它在大约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];