【问题标题】:Unzipping NSData with ZipArchive使用 ZipArchive 解压 NSData
【发布时间】:2012-11-23 07:03:47
【问题描述】:

我正在使用 ZipArchive 并正在从设备中读取数据。我想要做的是从设备中获取数据并解压缩。我能找到的唯一示例是获取数据,将其写入 iOS 设备上的文件,然后再次读取(解压缩)它......

这是我将其写入磁盘的代码(不工作)...

    // Read the data in...
if ((recvStringLen = recvfrom(connectSock, recvString, 1025, 0, (struct sockaddr *)&broadcastAddr, &recvStringLen)) < 0) {
    NSLog(@"ERROR: Unable to receive user perms message.");
    [self showTimeoutError];
    return -1;
}

// get the file size...
unsigned int fileSize = (( recvString[16] << 24 ) & 0xff000000) |
                        (( recvString[17] << 16 ) & 0xff0000) |
                        (( recvString[18] << 8 ) & 0xff00 ) |
                        ( recvString[19] & 0xff );

NSLog(@"fileSize: %i", fileSize);

recvString[20+fileSize] = '\0'; // terminate the string...

// convert the char data to a string
NSString *stringData = [[[NSString alloc] initWithFormat:@"%s", &recvString[20]] autorelease];
NSData *data = [[[NSData alloc] initWithBytes:stringData length:fileSize] autorelease];

// write the data...
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"userinfo.zip"];
[data writeToFile:appFile atomically:YES];

// exist?
BOOL zipExists = [[NSFileManager defaultManager] fileExistsAtPath:appFile];

NSString *zipFilePath = [documentsDirectory stringByAppendingPathComponent:@"userinfo.zip"];

NSString *output = [documentsDirectory stringByAppendingPathComponent:@"userinfo.dat"];

ZipArchive* za = [[ZipArchive alloc] init];

// unzip it...
BOOL success = [za UnzipOpenFile:zipFilePath];
if( success ) {
    BOOL outSuccess = [za UnzipFileTo:output overWrite:YES];
    if( outSuccess != NO ) {
        NSLog(@"success");
    }

    [za UnzipCloseFile];
}

[za release];

BOOL datExists = [[NSFileManager defaultManager] fileExistsAtPath:output];

当它达到“成功”时,它总是“否”……即使“zipExists”为“是”。

我有两个问题: 1.我还没有成功将数据写入磁盘,读回来,解压。 2. 我宁愿只是解压缩数据(NSData),而不是通过将其写入磁盘并再次读取它......

我在发帖前搜索过,但找不到解决方案...

【问题讨论】:

    标签: ios unzip ziparchive


    【解决方案1】:

    跳过创建 NSString - 这是您的问题(或其中之一)。直接从 recvString 创建数据对象。想想如果数据有一个空字节,使用 %s 会发生什么。

    【讨论】:

    • 谢谢。我做了改变......仍然不起作用。有没有办法在不先将数据写入磁盘的情况下解压缩数据?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多