2005.04.01 Friday
相対パスを絶対パスへ変換する方法
|
一見ダイレクトな関数があるかと思うが、意外に見つからない。もしかしたらあるかもしれないが、見つからなかったので自分で考えてみた…(あったらごめん)
例えば、アプリがあるディレクトリーから、../../prefer.plist のような相対パスの絶対パスが知りたい時などがある。それはもちろんstringWithContentsOfFileなどの関数では、絶対パスが必要であるためだ。方法はいろいろあるとは思うが、よく使う関数という前提で、カテゴリーで考えてみた。 @implementation NSString (MyString) - (NSString *)absolutePathWithCurrentDirctoryPath:(NSString *)dirPath { // 絶対パスの場合は、そのまま返す if([ self hasPrefix:@"/" ]) return self; // ユーザーディレクトリー指定であれば、ルートは無視 if([ self hasPrefix:@"~/" ]) return [ self stringByStandardizingPath ]; // 絶対パスを生成 return [[ NSString stringWithFormat:@"%@/%@",dirPath,self ] stringByStandardizingPath ]; } @end 上のプログラムでは、間違えて相対パス部分に、絶対パスや、ホームディレクトリーを指定しても対応できるようにはしているが、シンボリックリンクや、エイリアスなどのパス変換までは考慮していない。エラー対策などを入れるともっといろいろ足さないといけない部分はあるとは思う。 上の例だと カレントディレクトリー:/Uesr/Miyakun/Applications/ 相対パス :../../etc/prefer.plist だとすると、結果は /User/etc/prefer.plist になる。 なんか、もっとスマートな方法があれば教えてください〜 |
||



![たのしいCocoaプログラミング[Leopard対応版]](http://ecx.images-amazon.com/images/I/31jKj%2BBWJIL._SL160_.jpg)
