2010-10-08 91 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