libro
www.tuyano.com
初心者のためのObjective-Cプログラミング入門

NSFileManagerとファイル操作 (6/6)

作成:2011-02-22 10:19
更新:2011-11-13 21:47

■リンクの作成

ファイルを扱うとき、ファイルでもフォルダでもないものが存在することを忘れてはいけません。それは「リンク」です。

リンクは、他のボリュームやフォルダ、ファイルといったもののエイリアスとして機能します。これは、ファイルに別名をつける「ハードリンク」と、ファイルの位置情報を保管する「シンボリックリンク」があります。いずれもNSFileManagerを使って作成することができます。

◯ハードリンクの作成
BOOL 変数 = [《NSFileManager*》 linkItemAtPath:《NSString*》 
        toPath:《NSString*》 error:《NSError**》];

◯シンボリックリンクの作成
BOOL 変数 = [《NSFileManager*》 createSymbolicLinkAtPath:《NSString*》 
        withDestinationPath:《NSString*》 error:《NSError**》];
いずれも、オリジナルとなるファイルのパスと、作成するリンクのパス、そしてエラー情報を保管するNSErrorといったものが引数に用意されます。NSErrorは、例によってポインタのポインタになります。注意したいのは、第1引数のほうが作成するリンクのパスで、第2引数がオリジナルのパスになる、という点です。これは間違えないように!

ハードリンクは、実際にあまり使われることは多くないでしょう。ユーザーが利用するものといえばシンボリックリンクのほうでしょう(Mac OS Xの「エイリアスを作成」で作られるのもこちらです)から、こっちの使い方だけ覚えておけばとりあえず十分ですね。

ただし、シンボリックリンクは、それ自体はただのファイルのようなもので、そこに保管されているオリジナルのファイル情報を使ってもとのファイルを識別しますので、このリンクからオリジナルのパスを調べる方法も知っておかないといけません。
NSString *変数 = [《NSFileManager*》destinationOfSymbolicLinkAtPath:
        《NSString*》 error:《NSError**》];
引数には、シンボリックリンクのパスを指定します。これで、そのシンボリックリンクのオリジナルのパスが得られます。

では、これも利用例を挙げておきましょう。下のリストは、「書類」フォルダのエイリアスをデスクトップに「doc_alias」という名前で作成するものです。作成後、destinationOfSymbolicLinkAtPath: error:メソッドでオリジナルのパスを確かめています。作成されたエイリアスをダブルクリックして、「書類」フォルダが開かれるか確認してみましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSFileManager* manager = [NSFileManager 
                                  defaultManager];
        NSString* path = [NSHomeDirectory()
                          stringByAppendingPathComponent:
                          @"Documents"];
        NSString* path2 = [NSHomeDirectory()
                           stringByAppendingPathComponent:
                           @"Desktop/doc_alias"];
        NSError* err;
        [manager createSymbolicLinkAtPath:path2 
                      withDestinationPath:path
                                    error:&err];
        NSLog(@"%@",[manager 
                     destinationOfSymbolicLinkAtPath:path2
                     error:&err]);
    }
    return 0;
}
※関連コンテンツ

「初心者のためのObjective-Cプログラミング入門」に戻る