2010-10-08 114 views
2

嘿,用zip文件初始化NSData是否正确?我想将一个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

有谁能指出我的错误请。 在此先感谢!

+1

呃,为什么你要从它创建一个字符串?这与您的问题描述不符。 – 2010-10-08 16:19:49

+0

嘿:)我是iPhone SDK的新手,所以我正在尝试所有愚蠢的事情。我想将一个文件复制到系统中,我可以将该文件转换为一个字符串,然后将该字符串写入另一个文件(好吧,这有点愚蠢)...但是现在像deanWombourne所说的那样,我会尝试使用NSFilaManager 。 – Bangdel 2010-10-11 04:39:45

回答

4

为什么这样呢? NSFileManager会为你做它:)

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

但是,对于文件的本地这只作品 - 如果你想将文件从服务器复制,你应该看看NSURLConnection加载数据,然后NSData的writeToFile:atomically:将内容保存到文件系统的方法(found here。)

+0

谢谢!所以我可以用这个从服务器上复制文件到设备上呢? – Bangdel 2010-10-11 04:40:14

+0

嘿,我在模拟器中测试我的代码。我尝试copyItemAtPath:为源和目标文件都在本地计算机上,它工作得很好。但是,当我将源路径设置为某个URL,如“http://someServer/someDirectory/zippedFile.zip”时,它会给出一个错误:没有这样的文件或目录。你能告诉我这里有什么问题吗? – Bangdel 2010-10-11 05:49:35

+0

你不能用它从服务器复制到你的设备 - 我认为你只是想在你下载文件后移动一个文件。看到我的编辑其他解决方案 – deanWombourne 2010-10-11 11:18:44

1

PK是您应该期望的输出。
每个zip文件中的前2个字符都是PK。然后有一些不可打印的字符,并且在那些字符后面有一个值为0的字符。
如果您从NSData中创建一个NSString,则会考虑所有直到第一个0值的值。

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

+0

k我会记住这一点 – Bangdel 2010-10-11 04:35:42