2014-04-29 40 views
-2

我正在開發一個應用程序,我需要在不覆蓋現有數據的情況下寫入文件。我的代碼是:在iOS中的文本文件中寫入NSString而不會覆蓋數據

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//creating a path 
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"file"]; 

//creating NSFileHandle and seeking for the end of file 
NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:appFile]; 
[fh seekToEndOfFile]; 

//appending data do the end of file 
NSString *dataString = @"Some Data"; 
NSData *data = [dataString dataUsingEncoding:NSASCIIStringEncoding]; 
[fh writeData:data]; 

代碼創建文件,但每次打開時,內容都會被覆蓋。一些解決方案

+0

'seekToEndOfFile'返回的偏移量是多少?並且在測試結束時驗證文件內容? – Wain

+1

我認爲你的代碼應該可以工作。 – trojanfoe

回答

-3

如果文件很大,這不是最佳解決方案。

您必須將文件內容讀入字符串。追加字符串與新數據。然後將字符串寫回文件。例如:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//creating a path 
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"file"]; 

//Retriving contents of the file 
NSStringEncoding enco; 
NSMutableString *logStr = [NSMutableString stringWithContentsOfFile:appFile usedEncoding:&enco error:nil]; 

NSString *dataString = @"Some Data"; 
[logStr appendString:@"\n"]; 
[logStr appendString:dataString]; 
[logStr writeToFile:appFile atomically:NO encoding:NSUTF8StringEncoding error:nil]; 
+0

它的工作原理!謝謝!完美解決方案 –

+0

@CarloM_dtb我會很高興知道爲什麼你的代碼不起作用,因爲它對我來說看起來不錯。如何在寫入文件後檢查文件內容?文件句柄在發生這種情況之前是否關閉? – trojanfoe

+4

等一下。雖然你的解決方案*工作*它**是非常不理想的**(因爲你自己說),因爲該文件可能是巨大的,可能導致應用程序的內存足跡膨脹。我不認爲你應該把這個建議作爲**解決方案,這樣你就可以賺取更多*代表*。 – trojanfoe

相關問題