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

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

作成:2011-02-22 10:16
更新:2011-11-13 21:45

■ファイルのデータを読み書きするには?

では、ファイルに書かれているデータを読み込んで利用したり、必要なデータをファイルに出力するにはどのようにすればいいでしょうか。これは、実はNSFileManagerだけでなく、もっとさまざまなクラスでそのための機能が用意されています。

例えば、「テキストファイルの読み書き」を行う場合を考えてみましょう。これは、実はNSStringを使って簡単に行うことができます。NSStringにはファイルアクセスに関するメソッドが用意されているのです。

◯テキストのロード
NSString *変数 = [NSString stringWithContentsOfFile:《NSString*》 
    encoding:《NSStringEncoding》 error:《NSError**》];

◯テキストのセーブ
BOOL 変数 = [《NSString*》 writeToFile:《NSString*》
     atomically:《BOOL》 encoding:《NSStringEncoding*》 error:《NSError**》];
いずれもファイルのパス、エンコーディング、エラー情報といった引数が用意されています。エンコーディングは、主なエンコーディングの種類をまとめた列挙型の値が用意されており、これを利用して指定します。主なエンコーディングの値を以下にあげておきましょう。
NSASCIIStringEncoding = 1,
NSJapaneseEUCStringEncoding = 3,
NSUTF8StringEncoding = 4,
NSISOLatin1StringEncoding = 5,
NSShiftJISStringEncoding = 8,
NSISOLatin2StringEncoding = 9,
NSISO2022JPStringEncoding = 21,
NSMacOSRomanStringEncoding = 30
まぁ、通常Mac OS XではUTF-8が使われますので、ここには「NSUTF8StringEncoding」を指定しておくとよいでしょう。EUCSJISなどは、NSJapaneseEUCStringEncodingNSShiftJISStringEncodingを指定しておけばいいでしょう。

もう1つの引数であるエラー情報は、NSError変数を用意します。通常、オブジェクトはポインタ変数として保管されますが、ここにはそのポインタ変数のアドレス(つまりポインタのポインタですね)を使ってNSErrorのポインタ変数にインスタンスが保存できるようにしてやります。このあたりのNSErrorの利用については既に説明してありましたね。

では、以下にその利用例をあげておきましょう。デスクトップのdata.txtを読み込んで出力し、それにテキストを追加したものをsaved.txtというファイル名で保存します。あらかじめdata.txtUTF-8でテキストを保存しておいてください。

ここではNSStringを使ったファイルアクセスを行いましたが、同様にNSArrayNSDirectoryなどのデータを扱うクラス、またバイナリデータを扱うNSDataなど、多くのデータを扱うためのクラスに同様のメソッドが用意されています。ファイルアクセスについては、どんなデータでも意外に簡単に行えるのです。

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

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

●プログラム・リスト●

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSString* path = [NSHomeDirectory()
                          stringByAppendingPathComponent:
                          @"Desktop/data.txt"];
        NSError* err;
        NSString* str = [NSString 
                         stringWithContentsOfFile:path 
                         encoding:NSUTF8StringEncoding 
                         error:&err];
        NSLog(@"%@",str);
        
        str = [str stringByAppendingString:
               @"** add test**\n"];
        NSString* path2 = [NSHomeDirectory()
                           stringByAppendingPathComponent:
                           @"Desktop/saved.txt"];
        [str writeToFile:path2 atomically:YES
                encoding:NSUTF8StringEncoding 
                   error:&err];
    }
    return 0;
}

※関連コンテンツ

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