[英]How to write data in chunks into disk in ios
嗨,在我的应用程序中,我正在下载pdf文件,而总大小却成块。 现在,在我以大块形式获取数据之后,我将其存储在NSData对象中,其余的大块则将其附加到同一对象中。 同时执行此应用时,由于内存不足警告而崩溃。 有什么方法可以将数据写入磁盘,然后再将数据追加到沙箱中的写入文件。 有时文件超过400 Mb。请帮助我。
NSFileHandle
可用于此目的:
像这样:
步骤1:创建一个名为_outputFileHandle
;
NSFileHandle *_outputFileHandle;
步骤2:一次调用prepareDataHandle
:
第3步:每当有数据垃圾进入时,调用writingDataToFile
。
相应地修改您的工作流程,以便它可以告知何时文件下载完成。
-(void)prepareDataHandle
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *outputFilePath = [documentsDirectory stringByAppendingPathComponent:@"anoutputfile.xxx"];
if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath] == NO)
{
NSLog(@"Create the new file at outputFilePath: %@", outputFilePath);
BOOL suc = [[NSFileManager defaultManager] createFileAtPath:outputFilePath
contents:nil
attributes:nil];
NSLog(@"Create file successful?: %u", suc);
}
_outputFileHandle = [NSFileHandle fileHandleForWritingAtPath:outputFilePath];
}
-(void)writingDataToFile:(NSData *)dataToWrite
{
if (dataToWrite.length != 0)
{
[_outputFileHandle writeData:dataToWrite];
}
else //you can use dataToWrite with length of 0 to indicate the end of downloading or come up with some unique sequence yourself
{
NSLog(@"Finished writing... close file");
[_outputFileHandle closeFile];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.