ファイルPathとファイルURLの違い
ファイルPath
/var/mobile/Containers/Data/Application/97C2495D-1A6B-4E5D-BCAE-39C64563328A/Documents/ファイル名ファイルURL
file:///var/mobile/Containers/Data/Application/97C2495D-1A6B-4E5D-BCAE-39C64563328A/Documents/ファイル名
WebのURLの頭に「http://」が付いてるのと一緒だな。
Documentディレクトリを得る
Path(String型)で得る
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)last!
【結果】
/var/mobile/Containers/Data/Application/97C2495D-1A6B-4E5D-BCAE-39C64563328A/Documents
URL型で得る
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last!【結果】
file:///var/mobile/Containers/Data/Application/97C2495D-1A6B-4E5D-BCAE-39C64563328A/Documents
Documentsディレクトリにファイル名を追加
URLの場合はそのまま追加できる
let fileURL = documentsURL.appendingPathComponent(fileName)
Pathの場合は一度URLに変換しないといけない
let fileURL = URL(fileURLWithPath: documentsPath).appendingPathComponent(fileName)
SwiftにはPathにファイル名などを追加するメソッドがない。(たしかObjective-Cにはあった)
そのため一度URL化する必要がある。めんどくせえ。
URLからPathに変換
let filePath = fileURL.path
URLのpathプロパティで得られる。
PathからURLに変換
let url = URL(fileURLWithPath: filePath)
引数のfilePathがPathと判断されない場合(例えばファイル名の文字列とか、空白文字とか)、
123456.jpg -- file:///
という、末尾に -- file:///が付いた変な形式に変換されてエラーの原因になるので注意が必要。
その場合は
let urlStr = URL(string: "123456.jpg")
とやるといい。
0 件のコメント:
コメントを投稿