2011-11-13 6 views
2

ファイルに複数の行を書く必要があります。ファイルの内容が毎回上書きされないように次の行に移動するにはどうすればよいですか?私はそれに次のコードでforループを使用しています目的Cファイルにコンテンツを追加する

[anNSString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];

NSStringです。 anNSStringは各ループ中に再初期化されます。だから私はそれぞれのループ中にそれぞれファイルパスに追加し続ける必要があります。 ありがとう

答えて

1

徐々に書き込みを試みるのではなく、一度にすべて書き出すだけです。 -[NSString writeToFile:atomically:encoding:error]はそのたびにファイルを上書きします。追加しません。ここで

はイラストです:

NSMutableString * str = [NSMutableString new]; 

// > anNSString is reinitialized during each loop. 
for (expr) { 
    NSString * anNSString = ...; 
    // > SO i need to keep adding to the file path each during each loop. 
    [str appendString:anNSString]; 
} 

NSError * outError(0); 
BOOL success = [str writeToFile:path 
        atomically:YES 
         encoding:NSUTF8StringEncoding 
          error:&outError]; 
[str release]; 
... 
+0

[ 'STRのappendString:anNSString];'ちょうど正しい、同じ行に上追加し続けるのだろうか?改行をどこに書き込むべきかをどのように指定しますか? – GeneralMike

+0

これは、 '\ r \ n'を使う必要があります。詳細は私の答えを見てください。 – GeneralMike

0

あなたは、新しい行にそれぞれの時間を書く@ジャスティンの答えにあるもので開始していますが、新しい行を必要な場所[str appendString:@"\r\n"];を追加する必要がある場合。このコードでは

NSMutableString * str = [NSMutableString new]; 

// > anNSString is reinitialized during each loop. 
for (expr) { 
    NSString * anNSString = ...; 
    // > SO i need to keep adding to the file path each during each loop. 
    [str appendString:anNSString]; 
    [str appendString:@"\r\n"]; //****** THIS IS THE NEW LINE ****** 
} 

NSError * outError(0); 
BOOL success = [str writeToFile:path 
        atomically:YES 
         encoding:NSUTF8StringEncoding 
          error:&outError]; 
[str release]; 
... 

、各anNSStringは、テキストファイルにそれ自身の行になります。

1

元の質問に答えなかったので、受け入れられた回答が正しくないように感じます。あなたが使用する必要があり、元の質問を解決するためNSOutputStreamことになり、既存のファイルにコンテンツを追加する簡単な作業:

NSString *myString = @"Text to append!"; // don't forget to add linebreaks if needed (\r\n) 
NSOutputStream *stream = [[NSOutputStream alloc] initToFileAtPath:filePath append:YES]; 
[stream open]; 
NSData *strData = [myString dataUsingEncoding:NSUTF8StringEncoding]; 
[stream write:(uint8_t *)[strData bytes] maxLength:[strData length]]; 
[stream close]; 
関連する問題