それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

NSFileHandlerでファイルコピー

ファイルを扱うときに、C言語で書かないように

ついついstdio.h で書いてしまうので、一番よく使いそうなものをここに残しておいた。

fileHandleForWritingAtPath がファイルをTruncateしてくれないのがちょっとした、気づきだった。

//
//  main.m
//  working
//
//  Created by takuya  on 20150821.
//  Copyright (c) 2015年 takuya. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
  @autoreleasepool {
    NSFileManager *fm = [NSFileManager defaultManager];
    NSString *src = @"/Users/takuya/Desktop/player_4.1.0.00.swf";
    NSString *dst = @"/Users/takuya/Desktop/out.txt";
    NSFileHandle *src_fh;
    NSFileHandle *dst_fh;
    /////////////////////
    //ファイルの読み込み
    /////////////////////
    if(![fm fileExistsAtPath:src] ){
        NSLog(@"ファイルがそんざいしない");
        return 1;
    }
    /////////////////////
    //データの読み込み
    /////////////////////
    src_fh = [NSFileHandle fileHandleForReadingAtPath:src];
    NSData *content = [ src_fh readDataToEndOfFile ];

    /////////////////////
    //ファイルの書き出し
    ////////////////////
    if(![fm fileExistsAtPath:dst] ){    //ファイルが存在スルか
      //空っぽファイルを作る
      BOOL result = [fm createFileAtPath:dst contents:nil attributes:nil];
      if (!result) {
        NSLog(@"ファイルの作成に失敗");
        return 1;
      }
      dst_fh = [NSFileHandle fileHandleForWritingAtPath:dst];
    }else{
      //ファイルを空にする
      dst_fh = [NSFileHandle fileHandleForWritingAtPath:dst];
      [dst_fh truncateFileAtOffset:0];
    }


    [dst_fh writeData:content];



  }
    return 0;
}