2011年5月4日水曜日

Cocoa FileManager NSURL

そこで初めてファイルの属性を取得する方法を勉強する。すごく泥縄だなあ。いつもだけど。
改めて
Low-Level File Management Programming Topics

を読んでみたら・・・10.6以降はファイル関係はNSStringではなくてNSURLを使え、と書いてあった。がちょーん。これまでのところ、全部path関係はNSStringで作ってしまった。

NSURLは全然使ったことがなかったが、ドキュメントを読むとファイル属性を簡単に取得できるようだ。というわけで実験開始。
OutlineViewから渡ってくるのはディレクトリを表す文字列path。これをURLにして、
 NSURL* url=[[NSURL alloc]initWithString:path];
        NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey,
                               NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey,NSURLFileAllocatedSizeKey, nil];
        
        NSArray *array = [fileManager contentsOfDirectoryAtURL:url includingPropertiesForKeys:properties options:0 error:nil];
こんな感じでファイル名やら属性やらを取得できる。ファイルの属性は
NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey,
NSURLCreationDateKey, NSURLLocalizedTypeDescriptionKey,NSURLFileAllocatedSizeKey, nil];
という配列で「取得したい属性」を指定する。fileManager contentsOfDirectoryAtURL:で返ってくるNSArrayに収められたNSURLのオブジェクトに、この属性もちゃんと収めれていて、
NSString *str=nil;
[myURL getResourceValue:&str forKey:NSURLLocalizedNameKey error:nil];
こんな感じでNSURLから取り出すことができる。

で、試しにローカライズされたファイル・ディレクトリ名があればそれを表示するようにしたのが下の画像。


うむ、こっちのほうがいいかな。ただ、OutlineViewではNSStringで全部やっているので、左側のペインと右側のペインで整合性がなくなっているのがつらいところ。

これもおいおい手をつけていこう。とりあえずはファイルの取り扱いを始められるように、ファイルサイズや更新日時を表示できるようにしてみる、と。

0 件のコメント:

コメントを投稿