はじめに
前の記事を見ると"はじめてに"という誤植がありました。。。恥ずかし。。。
Documentディレクトリについてお仕事でつまずいたのでまとめます。備忘録です。
Documentsディレクトリ
アプリ内で保有しているフォルダの一つでユーザ作成のコンテンツ(文書や画像、動画など)を保存しているのに適しています。
ディレクトリ操作に関する注意点
Swiftでアプリ内のファイル操作には、ファイルをString型のパスで指定する方法と、URL型のファイルURLで指定する方法の2通りがあります。
※ファイルURLは パスの先頭に”file://” が付加されているため、ファイルURLをパスに変換する場合、単純にキャスト(ファイルURL.absoluteString)しても上手くいかないです。
Documentsディレクトリ内に写真ファイルを保存する
まずは、以下のとおりDocumentsディレクトリ のファイルURLを取得します。
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
次に、保存する写真データの名前を付けます。※名前が重複すると保存できない。撮影した年月日時間を名前に入れてあげるなど工夫が必要です。
let fileName: String? = "IMG.jpg"
ディレクトリのパスにファイル名をつなげてファイルのフルパスを作成しましょう。
let fileURL = documentsURL.appendingPathComponent(fileName!)
写真ファイルをDocumentsディレクトリへ保存します。
※名前が重複すると保存できないです。撮影した年月日時間を名前に入れてあげるなど工夫が必要です。
let jpgImageData = image.jpegData(compressionQuality:0.5)
do {
try jpgImageData!.write(to: fileURL, options: .atomic)
} catch {
print(error)
}
Documentsディレクトリ内のファイルを全て取得する
まずはDocumentsディレクトリ のファイルURLを取得します。
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
次にDocuments ディレクトリ配下のファイル一覧をURL型で取得します。
※FileManager.default.contentsOfDirectory(at: documentsURL)の場合、ファイル名の一覧が取得できます。(["file1", "file2", "directory1"])
do {
let contentURLs = try FileManager.default.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
} catch {
print("error")
}
参考記事
以下を参考にさせていただきました。ありがたや。
・【Swift4】コピペで出来るDocumentsフォルダの操作方法(画像の保存編)
https://qiita.com/ryomaDsakamoto/items/ab8e5cd9da1ea70f3302
・【iOS】デバイス(ローカル)にデータを保存する方法
https://qiita.com/shiz/items/c7a9b3218269c5c92fed
・[Swift3.0] パスとファイルURLの違いと相互変換の方法
https://joyplot.com/documents/swift-fileurl-path/
・撮影した動画ファイルを iOS アプリ内に保存し、任意のタイミングでフォトライブラリに書き出す Swift コード
https://neos21.net/blog/2019/01/11-02.html
・【Swift】テキストファイルの読み書き
https://capibara1969.com/2836/#toc13
・[iOS][Swift]指定したディレクトリにあるファイルの一覧を取得する
https://egg-is-world.com/2017/08/13/ios-swift-file-list/
・【Swift】URLでパスを扱うときに便利なプロパティとメソッド
https://qiita.com/toshi586014/items/52b87c034e411681ca7b