第26回】この記事は2013年3月26日に書かれたものです。内容が古い可能性がありますのでご注意ください。第25回】ではファイルの存在確認を行いました。今回はそれ以外の機能についてみていきたいと思います。ファイル・ディレクトリの作成NSFileManagerを使用したファイル・ディレクトリの作成について見てみます。ディレクトリの作成を行うには「createDirectoryAtPath:withIntermediateDirectories:attributes:error」メソッドを使用します。この「createDirectoryAtPath」メソッドは「NSFileManager.m」ファイル内で以下のように宣言されています。Xv10.5から推奨しないとなっているので、上のメソッドを利用することにします。第1引数はディレクトリを作成するパスをNSString型のオブジェクトで指定します。第2引数は第1引数で指定したパスのディレクトリがなかった場合、中間のディレクトリを作成するどうかをしています。第1引数で「./mydir/testdate」と指定していたとします。その時カレントディレクトリに「mydir」がないと「testdate」は作成されませんが、この第2引数に「YES」を指定すると「mydir」を作成してその配下に「testdate」を作成してくれます。第3引数は作成されたディレクトリの属性の設定を行う時に使用します。ここで「nil」を指定するとデフォルトの属性値が設定されるようになっています。NSDictionaryクラスはオブジェクトの集合を管理するものとなります。NSArrayとの違いは、添え字で管理しているNSArrayに対して、キー名で中のオブジェクトを管理することができます。第4引数は前に出てきたとおりエラーの情報を管理するために使用されるクラスを指定します。ファイルの作成の方は「createFileAtPath:contents:attributes」メソッドを使用します。(NSDictionary*)attributes;まず第1引数はファイルを作成するパスをNSString型のオブジェクトで指定します。第2引数はファイル内に書き込む中身を指定します。NSDataはバイナリデータの格納を行うための第3引数はディレクトリのところと同様にファイルの属性を指定する際に使用されるものとなります。コピーNSFileManagerを使用したファイルの移動を行うには「moveItemAtPath」メソッドを使用します。このメソッドは「NSFileManager.m」ファイル内で以下のように宣言されています。(NSError**)error第1引数は移動したいファイルのパスをNSString型のオブジェクトで指定します。第2引数は移動先のパスをNSString型のオブジェクトで指定します。第3引数はエラーの情報を管理するために使用されるクラスを指定します。続いてコピーの方です。(NSError**)error引数は移動と同じとなります。先ほど紹介した、メソッドのうちディレクトリ作成とファイル移動を実際使用してみましょう。前回のコードでデータの読み取りをしていましたので、データ読み取りが済んだファイルに関しては別のディレクトリに移動させることにします。元のデータの入っているディレクトリを「data」、移動先のディレクトリを「old」となるようにしています。printf("ディレクトリです。printf("ファイルです。printf("ディレクトリが見つかりません。0;}全体的な流れとしてはまず移動先のディレクトリを作成しています。最後に処理済みのファイルを最初に作成したディレクトリに移動というものとなっています。前回からの変更点としては14行目で読み取り済みのデータを保存するパスを表すNSStringオブジェクトを作成しています。20行目で移動先のディレクトリを作成する前にすでにディレクトリが作成されているかどうかの確認を行っています。22行目はディレクトリが存在しない場合に行われる処理で、ディレクトリの作成を行っています。41行目では同一ファイル名で移動させるために移動先のパスとファイル名を結合しています。56行目で実際のコピーをしています。第1引数でコピー元ファイル名と指定し、第2引数でコピー先ファイル名を指定しています。結果確認プログラム自体の実行結果の表示は変わりませんが、実行後のディレクトリ情報をみるとファイルが移動されていると思います。NSFileManagerで使用できるメソッドはこれ以外にもありますので、クラスリファレンスなどで確認してみてください。Xv10.5から推奨しないとなっているメソッドについても記載されています。Xv10.5では推奨されていないメソッドもこのクラスには結構あるので気を付けてくださいといったところでしょうか。