2011-01-07 18 views
7

Bir dosyaya zaman zaman bir dosyaya yazmam gerek.OSX'te writeFFile, dosyaya ekleniyor mu?

Şu anda var:

BOOL ok = [[NSString stringWithFormat:@"%f",raw] writeToFile:path atomically:YES encoding:NSUnicodeStringEncoding error:&error]; 

nasıl dosyasının raw yeni içerikleri sonuna eklenecek olabilir?

cevap

6

Bir yöntem, fileHandleForWritingAtPath: yöntemini kullanarak NSFileHandle'ı elde etmek, NSString'inizi NSData'ya dönüştürmek ve ardından dosya işaretçisini dosyanın sonuna taşıdıktan sonra NSFileHandle'ınızda writeData: öğesini çağırmak olacaktır.

+0

Doğru. -writeTo ... yöntemleri yazılan içeriğin üzerine dosyanın üzerine yaz. "AppendTo ..." eşdeğeri yoktur. –

+0

Ancak, iş yapan kodu sağlamak için bir appendToFile ... – ericg

19

Alıcı, belirtilen kodlamayla (normalde NSUTF8StringEncoding) belirtilen yola alıcı ekleyecek bir NSString kategori yöntemidir.

- (BOOL) appendToFile:(NSString *)path encoding:(NSStringEncoding)enc; 
{ 
    BOOL result = YES; 
    NSFileHandle* fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    if (!fh) { 
     [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 
     fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    } 
    if (!fh) return NO; 
    @try { 
     [fh seekToEndOfFile]; 
     [fh writeData:[self dataUsingEncoding:enc]]; 
    } 
    @catch (NSException * e) { 
     result = NO; 
    } 
    [fh closeFile]; 
    return result; 
} 
+1

+1 uygulayan NSString üzerinde bir kategori yöntemi yazmak çok zor olacağını düşünmüyorum. (IMO, bu kabul edilen cevap olmalı.) – Olie

+0

+1 benim için de çalıştı :) – eento

1
Peter N Lewis Yanıt için

Li'l düzenleme: Eğer NSString Bir kategori için bu yöntemi koyduğunuzda

[self appendToFile:fileName encoding:NSUTF8StringEncoding]; 
1

strcontentself olabilir istiyorum hiç

- (BOOL) appendToFile:(NSString *)path encoding:(NSStringEncoding)enc; 
{ 
    BOOL result = YES; 
    NSFileHandle* fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    if (!fh) { 
     [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil]; 
     fh = [NSFileHandle fileHandleForWritingAtPath:path]; 
    } 
    if (!fh) return NO; 
    @try { 
     [fh seekToEndOfFile]; 
     [fh writeData:[strcontent dataUsingEncoding:enc]]; 
    } 
    @catch (NSException * e) { 
     result = NO; 
    } 
    [fh closeFile]; 
    return result; 
} 

Çağrısı .

İlgili konular