Cocoaでファイル入出力
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の学習にこんな時間かかるなんて、なんて新鮮!
たまには違う言語もやってみるものですな。