備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

Objective-cでファイル書き込み

アプリのローカルにファイルを保存したくなって実装してみたのでメモ。
指定したファイルがなければ、ファイルを作成して書き込み。

- (BOOL)write
{
  NSString *homeDir = NSHomeDirectory();
  NSString *filePath = [homeDir stringByAppendingPathComponent:_name];
  NSFileManager *fileManager = [NSFileManager defaultManager];
  BOOL result = [fileManager fileExistsAtPath:filePath];
  if(!result){
    result = [self createFile:filePath];
  }
  if(!result){
    return NO;
  }
  NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
  if(!filePath){
    return NO;
  }
  NSString *writeLine = @"Sample Text";
  NSData *data = [writeLine dataUsingEncoding:NSUTF8StringEncoding];
  [fileHandle writeData:data];
  //効率化のためにファイルに書き込まれずにキャッシュされる場合があるらしいのでsynchronizeFileで書き込み
  [fileHandle synchronizeFile];
  [fileHandle closeFile];
  return YES;
}

- (BOOL)createFile:(NSString *)filePath
{
  return [[NSFileManager defaultManager] createFileAtPath:filePath contents:[NSData data] attributes:nil];
}

NSFileManagerのseekToEndOfFileメソッドを使用すると書き込み開始位置が最後になるので、上書きにならず、末尾から追記されていく。