2011-01-24 19 views
19

私のアプリケーションのナビゲーションに基づいています。メモUIViewControllerのUItextView。私はテキストのデータをファイルに書き出しています。今私は追加モードで、私はしようとしているコードを書く必要がありますが、毎回同じテキストデータで2つの時間に書き込み、ファイルに次のテキストデータを追加しないでください。テキストファイルの追加モードでの書き込み方法

- (void)saveText:(id)sender 
{ 
    [self.textview resignFirstResponder]; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [documentPaths objectAtIndex:0]; 
    NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
    NSString *savedString = textview.text; 
    [savedString writeToFile:documentTXTPath atomically:YES]; 


    NSFileHandle *myHandle = [NSFileHandle fileHandleForUpdatingAtPath:documentTXTPath ]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData: [savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
    [myHandle closeFile]; 

} 

答えて

29

コード

[savedString writeToFile:documentTXTPath atomically:YES]; 

、残りの次のコード行を削除し、すべての罰金です。とにかくそれが動作これを試してみて、また私のコード

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
    NSString *savedString = textview.text; 
    NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:documentTXTPath]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData:[savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
+0

に内容を書き込みます。 ファイルは作成するための作成ではありません。 – SOF

+2

既にファイルを作成したら、追加を追加します。最初に文書フォルダ内のテキストファイルを削除してファイルに書き込み、チェックすると、そのファイルが文書内にあるかどうかがチェックされます。ドキュメントフォルダにテキストファイルが表示されないためです。 – SOF

+0

stderrがログを書き込んでいますが、私はfreopen([documentTXTPath cStringUsingEncoding:NSASCIIStringEncoding]、 "a +"、stdout)として試してみました。それは正常に動作しています。テキストが並んでいますが、テキストが既にUITEXTViewにある場合は、同じテキストのもう1つの時間を記述しています。 – SOF

23

をチェック偉大

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.txt"]; 
NSString *savedString = textview.text; 

ファイルは、それを作成存在し、ファイルの最後に、他の既に作成APPENDをファイルまたはに書き込めません場合は

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if(![fileManager fileExistsAtPath:documentTXTPath]) 
{ 
    [savedString writeToFile:documentTXTPath atomically:YES]; 
} 
else 
{ 
    NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingAtPath:documentTXTPath]; 
    [myHandle seekToEndOfFile]; 
    [myHandle writeData:[savedString dataUsingEncoding:NSUTF8StringEncoding]]; 
} 
+0

これはKingOfBlissよりも優れた答えです。ファイルがまだ存在しない場合 –

-1

また、行うことができます

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *documentTXTPath = [documentsDirectory stringByAppendingPathComponent:@"Notes.text"]; 
NSString *content = [NSString stringWithContentsOfFile:documentTXTPath encoding:NSUTF8StringEncoding error:nil]; 
content = [content stringByAppendingString:data]; 

そして再び[savedString WRITETOFILE:アトミックdocumentTXTPath:YES]を削除した場合、特定のファイルパス

[content writeToFile:documentTXTPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
関連する問題