ファイルの分割書き込み
一括でファイルに書き込む場合は、
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を忘れないように。