2012-04-15 76 views
3

什麼是在設備上以編程方式創建file.txt的最簡單方法,然後在應用程序中寫下一些數據,然後將這些數據發送給您電腦?將數據寫入設備上的文件並從設備(iPhone)讀回

我想最後一部分可以通過編程方式完成,就像使用計算機上的某個程序從設備獲取數據一樣。

直到現在我做這樣的

NSFileHandle *infile; 
NSFileManager *fm; 
fm=[NSFileManager defaultManager]; 
NSString *strings=[@"/Downloads/file.txt" stringByExpandingTildeInPath]; 

if (![fm fileExistsAtPath:strings]) { 
[fm createFileAtPath:strings contents:nil attributes:nil]; 
infile=[NSFileHandle fileHandleForWritingAtPath:strings]; 
[infile writeData:[[NSString stringWithFormat:@"lalala japierdole\n", [NSDate date]] dataUsingEncoding:NSUTF8StringEncoding]]; 
}else { 
infile=[NSFileHandle fileHandleForWritingAtPath:strings]; 
[infile seekToEndOfFile]; 
} 
[infile writeData:[[NSString stringWithFormat:@"lulukukuioio.\n", [NSDate date]] dataUsingEncoding:NSUTF8StringEncoding]]; 

某事,這是剛剛創建的文件,如果不存在的話,寫了一些數據,但我有路徑的問題。當我在我的設備上使用我的模擬器時,此代碼工作正常,然後我真的不知道我是否創建了該文件以及如何在稍後再接收該文件。

+0

另外,它可以有助於獨立於write語句創建字符串,這樣可以在調試器和/或NSLog語句中驗證該字符串。 write語句中有很多方法調用。請參閱@EricS來解答您的問題。 – zaph 2012-04-15 14:35:34

回答

6

讀取&原始數據寫入到文件最簡單的API:

NSData *data = [NSData dataWithContentsOfFile:path]; 
[data writeToFile:path atomically:NO]; 

您有問題的原因是,你的路徑不是設備上有效。試試這個:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
if (paths.count > 0) 
{ 
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"file.txt"]; 
    NSData *data = [NSData dataWithContentsOfFile:path]; 
    ... 
} 
+0

爲什麼需要測試paths.count> 0的任何原因? – user523234 2012-04-15 14:36:43

+0

大多是偏執狂。如果你不測試它,並且它是空的,調用[paths objectAtIndex:0]將會拋出一個異常。雖然在這種特殊情況下不太可能是空的,但有時會發生在Mac上,因爲用戶可以移動和重命名目錄。如果使用NSFileManager的createDirectoryAtPath:withIntermediateDirectories:attributes:error方法,我可能會創建該目錄。 – EricS 2012-04-15 14:50:43

+0

然後我怎麼能得到這個file.txt到我的電腦?用電子郵件?或者還有其他更好的選擇? – user1246957 2012-04-15 15:13:16