【问题标题】:convert .zip file into NSData将 .zip 文件转换为 NSData
【发布时间】:2011-04-22 21:54:28
【问题描述】:

嘿,用 zip 文件初始化 NSData 是否正确?我想将一个 zip 文件转换为 NSData 并用数据构造另一个文件(用简单的语言“复制它”)。我的代码如下:

NSURL *theFileUrl = [NSURL URLWithString: @"file://localhost/Users/xxx/Desktop/testZippedFile.zip"];

NSData *data = [NSData dataWithContentsOfURL: theFileUrl];

当我 NSLog(@"Data: %@", data) 时,我确实得到了一些输出,但是当我尝试用这些数据初始化一个 NSString 时,它不起作用:

 NSString *str = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
`NSLog(@"String: %@", string)`

我得到的日志是:String: PK

谁能指出我的错误。 提前致谢!

【问题讨论】:

  • er,你到底为什么要从中创建一个字符串?这与您的问题描述不符。
  • 嘿 :) 我是 iPhone SDK 的新手,所以我正在尝试所有愚蠢的事情。我想将文件复制到系统上,我可以将文件转换为字符串,然后将此字符串写入另一个文件(好吧,这有点愚蠢)......但现在正如 deanWombourne 所建议的那样,我会尝试使用 NSFilaManager .

标签: iphone cocoa-touch nsstring zip nsdata


【解决方案1】:

为什么要这样? NSFileManager 会为你做的 :)

[[NSFileManager defaultManager] copyItemAtPath:oldPath toPath:newPath error:nil];

但是,这仅适用于本地文件 - 如果您想从服务器复制文件,您应该查看 NSURLConnection 以加载数据,然后查看 NSData 的 writeToFile:atomically: 方法来保存内容到文件系统 (found here.)

【讨论】:

  • 嘿,我正在模拟器中测试我的代码。我尝试了 copyItemAtPath: 源文件和目标文件都在本地机器上的位置,它工作得非常好。但是当我将源路径设置为某个 URL 说“someServer/someDirectory/zippedFile.zip”时,它会给出一个错误:没有这样的文件或目录。你能告诉我这里出了什么问题吗?
  • 您不能使用它从服务器复制到您的设备 - 我假设您只是想在下载文件后移动它。查看我对其他解决方案的编辑
  • 谢谢...我做了一些类似的事情... NSString *pathForFile = [NSString stringWithString: @"someServer/someDirectory/zippedFile.zip"]; NSString *pathForDestination = [documentsDirectory stringByAppendingPathComponent: @"temp.zip"] ; NSURL *urlForFile = [NSURL URLWithString: pathForFile]; NSData *zipFileData = [NSData dataWithContentsOfURL: urlForFile]; [zipFileData writeToFile: pathForDestination options: NSDataWritingAtomic error:&error]
  • 它工作正常...但我想我必须处理 NSURLConnection 的事情...非常感谢!
【解决方案2】:

PK 是您应该期待的输出。
每个 zip 文件中的前 2 个字符是 PK。然后是一些不可打印的字符,在这些字符之后的某个时间点有一个值为 0 的字符
如果您从 NSData 创建一个 NSString ,则所有值都被考虑在内,直到第一个 0 值。

从不将二进制数据转换为 NSString。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多