Calendar
1234567
891011121314
15161718192021
22232425262728
293031    
<< August 2010 >>
Recent Comments
Recent Trackback
Categories
Archives
Recommend
Recommend
たのしいCocoaプログラミング[Leopard対応版]
たのしいCocoaプログラミング[Leopard対応版]
木下 誠
iPhone開発に役立つぞ!
Recommend
詳解 Objective-C 2.0
詳解 Objective-C 2.0
荻原 剛志
世界一詳しいObjective-Cの本
Links
Member's Blog
Others
Profile
<< Cocoa勉強会 関西 | main | PHPプログラマー募集? >>
ファイルパスの初歩的な間違い
 
Cocoa系のAPIでは問題ないのだが、CF,CG系のAPIなどではファイルパスの書き方でよく初歩的なミスをする。(いや自分だけかもしれないので、忘れないように書いておこう)

例えばNSStringを用いて以下のようなAPI(CGDataをファイルパスから呼び出す関数)を用いる時

CGDataProviderRef CGDataProviderCreateWithFilename(const char *filename);

何も考えず


CGDataProviderRef aCGDataRef;

aCGDataRef = CGDataProviderCreateWithFilename([ filePath cString ]);



とよくやってしまう。確かにこれでもエラーはでないし、型的には確かにあっているが、OSXのファイルシステムのファイル名はUTF-8が基本なので正確には


CGDataProviderRef aCGDataRef;

aCGDataRef = CGDataProviderCreateWithFilename([ filePath UTF8String ]);



としなくてはいけない。上の例ではファイルパスが全てASCII文字列なら問題ないが、パス名に日本語などが入ると全然受け付けない。と、自分も読めるパスと、読めないパスがあるというバグでようやく気づいた、情けない単純ミス(笑)
 
| Cocoa覚え書き | 08:45 | comments(9) | trackbacks(0) |
 
 
いちおうfileSystemRepresentationを使うほうが正式かと。
結果的にUTF8Stringと同じですけど。
| kimuraw | 2005/04/10 4:53 PM |
 
 
 
>いちおうfileSystemRepresentationを使うほうが正式かと。

ツッコミサンクス!!(・_・)/
これって、UTF8Stringと全く同じなのかな? もっといろいろ機能があればこっちを利用すべきだとは思うけど、やっぱりAPI名が長いよね(笑)
思い出す時、思わずUTF8Stringを使っちゃうんだけど…(^_^;
| みやくん | 2005/04/11 12:16 AM |
 
 
 
Appleのリファレンスには「ヘンな字があったら例外でるぜ」て
書いてありますけどどんなときなんでしょうね。
#勉強会のネタになるかな?

名前長すぎってのはホントそう思います。
公開されてないAPIをつつくときはよいのですけどね。
| kimuraw | 2005/04/12 12:57 AM |
 
 
 
> 「ヘンな字があったら例外でるぜ」
UTF-8以外の文字を入れたら例外出すぜって!事か?
その変な文字が何であるかを言ってくれないと全然機能的な役割がわからないジャン(^_^;
確かに、どういう時かという勉強会ネタにはなるけど、どういうプログラム組めば確かめられるんだ?(笑)
あとは、どっちの関数の方が(時間的な)コストがかからないかとかかな?ま、ほとんど差はないとは思うけどね〜
| みやくん | 2005/04/12 11:25 AM |
 
 
 
fileSystemRepresentationのリファレンスには、UTF-8という語が出てきません。
現状はUTF-8に変換されるのでUTF8Stringと同じことになるなると思いますが、ファイルシステム表現がUTF-8以外のシステムに乗っかった時、よきにはからってくれるということなんじゃないでしょうか。(と想像)
| ナキヲ | 2005/04/12 2:00 PM |
 
 
 
>UTF-8以外のシステムに乗っかった時

将来WindowsにCocoa開発環境が移植された時に!!(@_@)
ま、確かにもの凄く広い意味でfileSystemRepresentationの方が適応性があるってことなのでしょうね。
そんなことより、相対パス<>絶対パスの変換APIがほしい〜
| みやくん | 2005/04/13 1:24 AM |
 
 
 
NSURL経由させればできそう>相対<=>絶対パスの変換
相対パスの扱いや、ファイルパスへの/からの変換ができるので。
試してないですけど。

ちなみに改行入れた文字列でfileSystemRepresentationを呼んでも
エラーにはなりませんでした。
| | 2005/04/16 11:28 PM |
 
 
 
名前いれわすれました、木村です。
| kimuraw | 2005/04/16 11:29 PM |
 
 
 
>NSURL経由させればできそう>相対<=>絶対パスの変換

こっちの方がスマートそう。ただ、ダイレクトにNSStringやNSFileManagerあたりにほしいところかも(^_^;
| みやくん | 2005/04/18 12:54 AM |
 







http://blog.cocoa-study.com/trackback/105460