2011-08-12 6 views
10

Próbuję dołączyć łańcuchy do pliku lokalnego zasobu, ale mam problem ze znalezieniem rozwiązania. Próbuję utworzyć plik dziennika dla wszystkich wywołań funkcji w mojej aplikacji, więc jeśli się zawiesza, widzę, na której funkcji się zatrzymał.Jak dołączyć ciąg w pliku txt zasobu lokalnego dla iOS sdk

Utworzono plik log.rtf, ale nie mogę zapisać w tym pliku. Czy ktoś może mi pomóc dołączyć ciąg do tego pliku bez konieczności nadpisywania całej rzeczy?

Odpowiedz

31

Mam następujący kod dla powyższego problemu.

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
NSString *logPath = [[NSString alloc] initWithFormat:@"%@",[documentsDir stringByAppendingPathComponent:@"log.rtf"]]; 
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:logPath]; 
[fileHandler seekToEndOfFile]; 
[fileHandler writeData:[text dataUsingEncoding:NSUTF8StringEncoding]]; 
[fileHandler closeFile]; 
0
- (void)log:(NSString *)message { 
    NSMutableString *string = [[NSMutableString alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@/log.txt", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]]; 
    if (!string) string = [[NSMutableString alloc] init]; 
    [string appendFormat:@"%@\r\n", message]; 
    [string writeToFile:[NSString stringWithFormat:@"%@/log.txt", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] atomically:YES encoding:NSUTF8StringEncoding error:nil]; 
} 
+0

@ Tim 'WriteToFile: atomowo:' jest przestarzałe z XCode 4.1 –

+0

zaktualizowałem mojego kodu =)! – elslooo

+1

Co zrobić, jeśli rozmiar pliku przekracza 10 kB. Następnie zmienny ciąg nie może pomieścić tak dużej ilości danych, a następnie spowoduje awarię aplikacji. Proszę spróbuj tego i daj mi znać. Weź dokument txt. Przy wielkości 10k i spróbuj dodać jedną linię za pomocą tego kodu. –

0

ten sposób można to zrobić ..

+ (void)WriteLogWithString:(NSString *)log 
{ 

     if(log != nil){ 

      NSString *locationFilePath = [self getLogFilePath];//access the path of file 

      FILE *fp = fopen([locationFilePath UTF8String], "a"); 

      fprintf(fp,"%s\n", [log UTF8String]); 

      fclose(fp); 
     } 

} 
+0

dziękuje Sachin, ale to spowoduje dodanie do początku pliku, a nie na końcu pliku. –

Powiązane problemy