2011-08-12 9 views
10

Tôi đã cố gắng nối thêm chuỗi vào tệp tài nguyên cục bộ nhưng tôi gặp khó khăn khi tìm giải pháp. Tôi đang cố gắng tạo một file bản ghi cho tất cả các cuộc gọi chức năng trong ứng dụng của tôi vì vậy nếu nó bị treo tôi có thể thấy chức năng nó dừng lại.Cách thêm chuỗi trong tệp txt tài nguyên cục bộ cho sdk iOS

Tôi đã tạo tệp log.rtf nhưng không thể ghi vào tệp này. Ai đó có thể xin vui lòng giúp tôi nối thêm một chuỗi vào tập tin này mà không cần phải ghi đè lên toàn bộ điều?

Trả lời

31

Tôi đã sử dụng mã sau cho vấn đề trên.

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: nguyên tử:' bị phản đối từ XCode 4.1 –

+0

tôi cập nhật mã của tôi =)! – elslooo

+1

Điều gì sẽ xảy ra nếu kích thước tệp vượt quá 10k. Sau đó, chuỗi có thể thay đổi không thể chứa nhiều dữ liệu này, sau đó nó sẽ gây ra sự cố ứng dụng. Hãy thử điều này và cho tôi biết. Lấy một tài liệu txt. Với kích thước 10k và cố gắng nối thêm một dòng bằng mã này. –

0

Bằng cách này bạn có thể làm điều này ..

+ (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

nhờ Sachin, nhưng điều này sẽ thêm vào để bắt đầu tập tin của bạn, không phải ở cuối tập tin. –