繁体   English   中英

如何将大块数据写入ios中的磁盘

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM