解密250MB PDF文件

时间:2011-07-22 23:08:51

标签: ipad

我的X-Code项目中有一个250Mb加密的PDF文件,我需要在运行时解密和显示。由于文件大小很大,我无法解密。所以我将原始文件拆分为NSData块,将它们加密成不同的部分文件。在代码中,我正在解密这些多个块并将它们写入同一个文件然后显示它。

   NSData *decryptedData = [[NSData alloc] init];
   NSString *thepath = [NSString stringWithFormat:@"%@/decryptedfile.%@",[paths objectAtIndex:0], fileType];
   [decryptedData writeToFile:thepath atomically:YES];
   [decryptedData release];
   NSFileHandle *myFile = [NSFileHandle fileHandleForUpdatingAtPath:thepath];
   [myFile truncateFileAtOffset:0];
   for (int k=1; k<50; k++) { //i had 49 parts, hence the condition
      NSString *partFilePath = [NSString stringWithFormat:@"%@/%@-part%d.pdf",[paths objectAtIndex:0], [fileName objectAtIndex:i], k];
      NSData *tempDData = [[NSData alloc] initWithContentsOfFile:partFilePath];
      [myFile writeData:[tempDData AES256DecryptWithKey:@"secretkey"]];
      [tempDData release];
   }
   [myFile closeFile];

我有49个部分,并且正在解密它们,将它们写入单个文件。该程序在模拟器中运行良好,能够恢复原始PDF。但是在设备上,我的应用程序被终止了。 当for循环迭代第31次并且我尝试将我的解密数据写入应用程序的Documents文件夹时,它会被终止。换句话说,当我尝试添加超过150MB的数据时,我的应用程序终止。有没有其他方法可以实现此功能?

1 个答案:

答案 0 :(得分:0)

尝试拨打

[myFile synchronizeFile];

每次迭代;这会刷新缓冲区。如果这不起作用,我猜你需要低于基金会,需要在BSD级别直接使用无缓冲的io。