: O. Yuanying

Cocoaでファイル入出力

Cocoaでファイルの読み書きがしたいなーと思ったのですが、

  1. MacOSX Cocoa プログラミングにも、
  2. Happy Macintosh Developing Timeにも、
  3. たのしいCocoaプログラミングにも、

ファイルの読み書きの話が書いてないのでもしやCのライブラリを使うのかなーと思いながら嫌々Cの入門本をめくってたのですが、全然関係ないところでCocoaの該当クラスを見つけました。

使用するクラス

ソース

// #1 パスをフルパスに
NSString* outputFilePath = [outputFilePath stringByExpandingTildeInPath];
// #2 出力するファイルを生成
[[NSFileManager defaultManager] createFileAtPath:outputFilePath contents:nil attributes:nil];
NSFileHandle* input = [NSFileHandle fileHandleForReadingAtPath:inputFilePath];
NSFileHandle* output = [NSFileHandle fileHandleForWritingAtPath:ouputFilePath];

// #3 ループ
@try {
	NSData* data
	while (data = [input readDataOfLength:1]) {
		[output writeData:data];
	}
} @finally {
	[input closeFile];
	[output closeFile];
}

一応解説すると、

1 パスをフルパスに

stringByExpandingTildeInPathを使ってチルダ付きのパスをフルパスにしてます。

2 出力するファイルを生成

NSFileHandleで書き込むファイルは存在してないと駄目っぽい。最初これではまった、fileHandleForWritingAtPathでnilしか返ってこないんだもんね…。ということで、createFileAtPathを使ってファイル生成。

実を言うとこのメソッドでついでに書き込むデータも一緒に指定できるんだけど、今日はまあ練習ということで…。

3 ループ

inputから1バイト読み込んでoutputに書き込んでます。なんて無駄な処理。今日はまあ練習ということで…。

感想

ファイルIOの学習にこんな時間かかるなんて、なんて新鮮!

たまには違う言語もやってみるものですな。