代码之家  ›  专栏  ›  技术社区  ›  Ilya Suzdalnitski

iPhone:记录到文件

  •  0
  • Ilya Suzdalnitski  · 技术社区  · 15 年前

    我想将我的日志字符串记录到一个文件中。

    我实现了以下方法:

    void QuietLog (NSString *format, ...) {
        if (format == nil) {
            printf("nil\n");
            return;
        }
        va_list argList;
        va_start(argList, format);
    
        NSMutableString *s = [[NSMutableString alloc] initWithFormat:format
                                                           arguments:argList];
        [s replaceOccurrencesOfString: @"%%"
                           withString: @"%%%%"
                              options: 0
                                range: NSMakeRange(0, [s length])];
    
        #ifdef LOGTOFILE_MODE
        NSData *dataToWrite = [s dataUsingEncoding: NSUTF8StringEncoding];
        [dataToWrite writeToFile: Log_FilePath atomically: YES];
        #else
        printf("%s\n", [s UTF8String]);
        #endif
    
        [s release];
        va_end(argList);
    }
    

    WriteToFile方法将以前文件中的所有数据替换为最后一个字符串。但是我想保留以前添加的数据,并添加一个新的字符串。

    WriteToFile有什么问题?为什么它会覆盖所有现有数据?如何添加新字符串而不是覆盖旧字符串?

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  7
  •   zpasternack    15 年前

    使用nsfilehandle怎么样,这样:

    NSData *dataToWrite = [s dataUsingEncoding: NSUTF8StringEncoding];
    NSFileHandle* outputFile = [NSFileHandle fileHandleForWritingAtPath:Log_FilePath];
    [outputFile seekToEndOfFile];
    [outputFile writeData:dataToWrite];
    
        2
  •  2
  •   Michael Pryor    15 年前

    这个简单的代码怎么样( ref apple support forum ):

    @implementation NSData (NSDataExtensions)
    
    - (BOOL) appendToFile: (NSString *) path atomically: (BOOL) flag
      {
        NSFileHandle fh = [NSFileHandle fileHandleForWritingAtPath: path];
    
        if(fh)
          @try
          {
             [fh seekToEndOfFile];
             [fh writeData: self];   
             [fh closeFile];   
             return YES;
          }
          @catch(id error) {}
    
        return NO;
      }
    @end