ファイルの分割書き込み

一括でファイルに書き込む場合は、

NSFileManager:
- createFileAtPath: contents: attributes:
NSData:
- writeToFile: atomically:

などが使えるが、データを細切れにして
複数回に分けて書き込みたい時もある。
ファイルが巨大だったり、メモリを節約したかったり、
CPU負荷を減らしたかったり、ログファイルのように
書き込み終了のタイミングが読めないものなどの
時が挙げられる。


以下がやりかた。


ファイルハンドルの準備

NSFileHandle *fileHandle;

NSString* filename = [NSString stringWithFormat:@"Documents/test.dat"];
NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:filename];
	
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
fileHandle = [[NSFileHandle fileHandleForWritingAtPath:filePath] retain];

初めてファイルに書き込む場合
(ファイルが存在しない場合)、
ファイルハンドルをいきなり作ることが出来ない。
そのため、ファイルハンドルを作る前に、
NSFileManagerを使って中身が空のファイルを
作っている。
ファイルハンドルはオートリリース状態で
取得することになる。
必要であれば上記例のようにretainすること。


書き込み

char *data;
int dataLen;

NSData *data = [NSData dataWithBytes:data length:dataLen];
[fileHandle writeData:data];

- writeData:によって、NSDataのオブジェクトを
書き込むことが出来る。


後処理

[fileHandle closeFile];
[fileHandle release];

クローズとreleaseを忘れないように。