NSFileManagerとファイル操作 (5/6)
作成:2011-02-22 10:16
更新:2011-11-13 21:45
更新:2011-11-13 21:45
■ファイルのデータを読み書きするには?
では、ファイルに書かれているデータを読み込んで利用したり、必要なデータをファイルに出力するにはどのようにすればいいでしょうか。これは、実はNSFileManagerだけでなく、もっとさまざまなクラスでそのための機能が用意されています。
例えば、「テキストファイルの読み書き」を行う場合を考えてみましょう。これは、実はNSStringを使って簡単に行うことができます。NSStringにはファイルアクセスに関するメソッドが用意されているのです。
◯テキストのロード
◯テキストのセーブ
もう1つの引数であるエラー情報は、NSError変数を用意します。通常、オブジェクトはポインタ変数として保管されますが、ここにはそのポインタ変数のアドレス(つまりポインタのポインタですね)を使ってNSErrorのポインタ変数にインスタンスが保存できるようにしてやります。このあたりのNSErrorの利用については既に説明してありましたね。
では、以下にその利用例をあげておきましょう。デスクトップのdata.txtを読み込んで出力し、それにテキストを追加したものをsaved.txtというファイル名で保存します。あらかじめdata.txtにUTF-8でテキストを保存しておいてください。
ここではNSStringを使ったファイルアクセスを行いましたが、同様にNSArrayやNSDirectoryなどのデータを扱うクラス、またバイナリデータを扱うNSDataなど、多くのデータを扱うためのクラスに同様のメソッドが用意されています。ファイルアクセスについては、どんなデータでも意外に簡単に行えるのです。
例えば、「テキストファイルの読み書き」を行う場合を考えてみましょう。これは、実はNSStringを使って簡単に行うことができます。NSStringにはファイルアクセスに関するメソッドが用意されているのです。
◯テキストのロード
NSString *変数 = [NSString stringWithContentsOfFile:《NSString*》
encoding:《NSStringEncoding》 error:《NSError**》];
◯テキストのセーブ
BOOL 変数 = [《NSString*》 writeToFile:《NSString*》いずれもファイルのパス、エンコーディング、エラー情報といった引数が用意されています。エンコーディングは、主なエンコーディングの種類をまとめた列挙型の値が用意されており、これを利用して指定します。主なエンコーディングの値を以下にあげておきましょう。
atomically:《BOOL》 encoding:《NSStringEncoding*》 error:《NSError**》];
NSASCIIStringEncoding = 1,まぁ、通常Mac OS XではUTF-8が使われますので、ここには「NSUTF8StringEncoding」を指定しておくとよいでしょう。EUCやSJISなどは、NSJapaneseEUCStringEncodingやNSShiftJISStringEncodingを指定しておけばいいでしょう。
NSJapaneseEUCStringEncoding = 3,
NSUTF8StringEncoding = 4,
NSISOLatin1StringEncoding = 5,
NSShiftJISStringEncoding = 8,
NSISOLatin2StringEncoding = 9,
NSISO2022JPStringEncoding = 21,
NSMacOSRomanStringEncoding = 30
もう1つの引数であるエラー情報は、NSError変数を用意します。通常、オブジェクトはポインタ変数として保管されますが、ここにはそのポインタ変数のアドレス(つまりポインタのポインタですね)を使ってNSErrorのポインタ変数にインスタンスが保存できるようにしてやります。このあたりのNSErrorの利用については既に説明してありましたね。
では、以下にその利用例をあげておきましょう。デスクトップのdata.txtを読み込んで出力し、それにテキストを追加したものをsaved.txtというファイル名で保存します。あらかじめdata.txtにUTF-8でテキストを保存しておいてください。
ここではNSStringを使ったファイルアクセスを行いましたが、同様にNSArrayやNSDirectoryなどのデータを扱うクラス、またバイナリデータを扱うNSDataなど、多くのデータを扱うためのクラスに同様のメソッドが用意されています。ファイルアクセスについては、どんなデータでも意外に簡単に行えるのです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
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プログラミング入門」に戻る