Swift でディレクトリを中間層も含めて作成する

Swift プログラミング

Swift でディレクトリを作成したいときは NSFileManager を使うと中間層も含めた再帰的な作成が簡単にできます。

Swift ではエラーの受け取り周りに少し癖があるので、それについても軽く整理しておきます。


Swift でディレクトリを作成したいときは Foundation.frameworkNSFileManager を使うと、中間層も含めてディレクトリを作成できます。

ディレクトリを作成する

まず、冒頭あたりで次のようにして Foundation を利用できるようにします。

import Foundation

あとは、たとえば作成したいディレクトリが変数path に設定されていたとすると、次のようにすると簡単にディレクトリを作成できます。

let fileManager = NSFileManager.defaultManager()
let succeed = fileManager.createDirectoryAtPath(path, withIntermediateDirectories: true, attributes: nil, error: nil)

中間ディレクトリの扱い

上記のようにwithIntermediateDirectoriestrue を指定すると、指定したパスの中間層が存在しない場合は自動的に作成されます。

ここにfalse を指定すると、直前までのディレクトリが存在しない場合はエラーになります。

成功判定

また、createDirectoryAtPath:withIntermediates:attributes:error:メソッド の戻り値は、ディレクトリの作成に成功した場合にtrue を返します。

指定したディレクトリが既にあったときに「成功」と判断されるかはwithIntermediateDirectories の指定によって少し変わってきます。

withIntermediateDirectories 成功判定の違い
true 既に存在するディレクトリが指定されたときにも「成功」とします。
false 既に存在するディレクトリが指定されたときには「失敗」とします。

エラーメッセージを取得する

どのような理由でディレクトリの作成に失敗したかを知りたいときにはerrorNSErrorPointer型 の可変値変数を渡すことで取得できます。

このNSErrorPointer型 というのは、具体的にはAutoreleasingUnsafeMutablePointer<NSError?>型 なので、つまりここにはNSError?型 を入出力パラメータとして渡すことになります。

let fileManager = NSFileManager.defaultManager()

var isError = NSError?()
let succeed = fileManager.createDirectoryAtPath(path, withIntermediateDirectories: true, attributes: nil, error: &isError)

入出力パラメータは、メソッドを呼び出すときに引数に渡す変数の頭に& をつけることで表現できます。

このようにすることで、何かエラーがあったときに 変数isError にその情報が記録されたNSError が設定されます。