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
<< 制作日誌 T.ClipX  その1 | main | XCode ScriptMenu カスタマイズ方法 >>
相対パスを絶対パスへ変換する方法
 
 一見ダイレクトな関数があるかと思うが、意外に見つからない。もしかしたらあるかもしれないが、見つからなかったので自分で考えてみた…(あったらごめん)

 例えば、アプリがあるディレクトリーから、../../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覚え書き | 00:46 | comments(0) | trackbacks(0) |







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