Swift 指定したDocuments直下にファイルを生成するときにフォルダも作成したいが出来なかった。
実現したかったこと
アプリ内で保持している保存領域のDocuments
フォルダがあります。
その直下にフォルダ「private」を作成し、その直下にファイルを直置きしたいです。
しかしながら、フォルダが存在しない場合はファイルの作成が失敗しました。
色々調べましたが、相対パスなら出来ると描いてありましたが、結局できず。
解決方法としては以下になります。
- フォルダが存在するか確認する
- 存在しない場合:フォルダを作成し、ファイルを作成する
- 存在する場合:ファイルを作成する
フォルダの実在確認について
let filmManager = FileManager()
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let targetFolderPath = documentsPath + "/private"
let IsExistTargetFolder = FileManager.default.fileExists(atPath: applogPath)
if (IsExistTargetFolder == false) {
// 存在していない場合だけ作成処理が行われる。
do {
try filmManager.createDirectory(atPath: targetFolderPath, withIntermediateDirectories: true, attributes: nil)
// let filePath: String = path + "/app_log" + "/data.txt"
} catch let error1 {
print("Error createDirectory : \(targetFolderPath) : " , error1.localizedDescription ," \(#function)[\(#line)]" )
// return false こちらを実装しているメソッドで戻り値成功or失敗のBoolなどでご活用ください
}
}
ファイルを作成する処理
シンプルに指定ディレクトリにファイルを作成する処理です。
func createApplicationLog () -> Bool{
let filmManager = FileManager()
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let filePath: String = path + "/private" + "/file.text" // 拡張子指定なしも可能です。
// 保存したいデータ
let saveText = "saveText"
//アーカイブしてdata.datというファイル名で保存する
let successful = NSKeyedArchiver.archiveRootObject(saveText, toFile: filePath)
return successful // 成功ならtrue 失敗ならfalse
}
Author And Source
この問題について(Swift 指定したDocuments直下にファイルを生成するときにフォルダも作成したいが出来なかった。 ), 我々は、より多くの情報をここで見つけました https://zenn.dev/tanukidevelop/articles/d24e8aa5543ef8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol