2012年2月20日月曜日

ファイルサイズを取得する方法

Cocoaでファイルサイズを取得する方法はいくつかあります。
1つはNSFileManagerのattributesOfItemAtPath:error:で返されるNSDictionaryのNSFileSizeキーの値を取得する方法ですが、この方法ではファイルの論理サイズは取得できますが、物理サイズ(アロケートサイズ)は取得できません。
もう一つの方法はMac OS X 10.6から追加されたNSURLのgetResourceValue:forKey:error:を使う方法です。このメソッドで返される辞書のNSURLFileSizeKey、NSURLFileAllocatedSizeKeyの値を取得する事で論理サイズ、物理サイズが取得できます。ただ、この方法でもデータフォークのサイズしか取得できないようです。
リソースフォークも含めたサイズを取得するためにはCarbon File ManagerのFSGetCatalogInfoかFSIterateForksを使うしかないようです。CarbonのFile Managerを使うためにはパスを表すNSStringからFSRefを取得する必要がありますが、これは下記のようにすれば取得できます。

 FSRef   fileRef;
 OSStatus status;

 status = FSPathMakeRef((const UInt8*)[path fileSystemRepresentation], &fileRef, NULL);

0 件のコメント:

コメントを投稿