[XCODE] NSFileManagerを用いてディレクトリを作成する、ファイルを保存する
こんにちは、@yoheiMuneです。
今日は、iPhone開発でFileManagerを用いた、ディレクトリの作成、 ファイルの保存方法をブログに書きたいと思います。
アプリ毎に、Root、Document, Cache, Libraryなどのディレクトリを持ち、 基本的にはアプリは自分のディレクトリのみにアクセスが可能です。
ディレクトリ構成についての詳しい情報は、 「[XCODE] iPhone iOSのディレクトリ構成について学んだ@YoheiM.NET」 が参考になれば幸いです。
保存する先のパスと保存するデータ(NSData形式)を使って、保存処理を行います。
以下がサンプル実装となります。
NSFileManager Class Reference
データを保存するためにCoreDataを用いていましたが、Imageファイルなどは、ディレクトリに保存しておく方が、 使い勝手が良いので、ディレクトリ管理を始めました。
今後も便利な使い方を知りましたらブログに書いて生きます(*゚▽゚)ノ
今後ともどうぞ宜しくお願いしますっ!!
今日は、iPhone開発でFileManagerを用いた、ディレクトリの作成、 ファイルの保存方法をブログに書きたいと思います。
iPhoneのディレクトリ構造について
iPhoneではアプリ毎に、サンドボックス化されたディレクトリ構造を持ちます。アプリ毎に、Root、Document, Cache, Libraryなどのディレクトリを持ち、 基本的にはアプリは自分のディレクトリのみにアクセスが可能です。
ディレクトリ構成についての詳しい情報は、 「[XCODE] iPhone iOSのディレクトリ構成について学んだ@YoheiM.NET」 が参考になれば幸いです。
FileManagerを使ってみる
今回は、アプリ毎に持つCacheディレクトリの下に、新規にディレクトリを作成し、 そこにデータを保存するサンプルを書いてみたいと思います。Cacheディレクトリのパスを取得する
Cacheディレクトリのパスを取得する方法は、以下のような実装となります。// NSCachesDirectoryを引数に渡し、戻ってきた配列の // 一つ目の要素を取得するとCacheディレクトリを取得できます。 NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cacheDirPath = [array objectAtIndex:0];
Cacheディレクトリの下に新規でディレクトリを作る
上記で取得したCacheディレクトリのパスを用いて、Cacheディレクトリの直下に新規でディレクトリを作ります。// まずは、新規で作るディレクトリの絶対パスを作成します。NSFileManagerの「createDirectoryAtPath:withIntermediateDireotries:attributes:error:」を用いることで、 ディレクトリを作成できます。
NSString *newCacheDirPath = [cacheDirPath stringByAppendingPathComponent:@"sampleDirectory"]; // 次にFileManagerを用いて、ディレクトリの作成を行います。 NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error = nil; BOOL created = [fileManager createDirectoryAtPath:newCacheDirPath withIntermediateDirectories:YES attributes:nil error:&error]; // 作成に失敗した場合は、原因をログに出します。 if (!created) { NSLog(@"failed to create directory. reason is %@ - %@", error, error.userInfo); }
新規で作成したディレクトリにファイルを保存する
上記で作成した新規ディレクトリに、画像ファイルなどを保存してみます。保存する先のパスと保存するデータ(NSData形式)を使って、保存処理を行います。
以下がサンプル実装となります。
// 保存するデータ。 // 今回は、サーバー上のデータを直接取得して、NSData形式で保持します。 NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.yoheim.net/image/108.png"]]; // 保存する先のパス NSString *savedPath = [newCacheDirPath stringByAppendingPathComponent:@"110.png"]; // 保存処理を行う。 // 失敗した場合には、NSErrorのインスタンスを得られるので、 // その情報を表示する。 NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error = nil; BOOL success = [fileManager createFileAtPath:path contents:data attributes:nil]; if (!success) { NSLog(@"failed to save image. reason is %@ - %@", error, error.userInfo); }ここでの注意点としては、存在しないディレクトリにファイルを保存しようとしたら、 エラーとなる点です。保存先ディレクトリは事前に作成しておく必要があるようです。
参考資料
今回は、以下のページを参考にしました。 上記で利用したメソッドの引数の意味や、他のメソッドなどは以下を参照頂けると幸いです。NSFileManager Class Reference
最後に
iPhone開発をし始めて2年。始めてFileManagerを用いたディレクトリ管理やファイル管理をし始めました。データを保存するためにCoreDataを用いていましたが、Imageファイルなどは、ディレクトリに保存しておく方が、 使い勝手が良いので、ディレクトリ管理を始めました。
今後も便利な使い方を知りましたらブログに書いて生きます(*゚▽゚)ノ
今後ともどうぞ宜しくお願いしますっ!!