Documentフォルダのファイル名一覧を取得する際の罠

はじめに

こちらのサイトを参考にDocumentフォルダ内に保存されているファイル名一覧を取得しようとしていたのですが、なぜかファイル名が取得できずにいました。

色々試して解決したので解決方法をメモとして残しておきます。

間違った取得

Documentフォルダへのパスは以下の様に取得するのが一般的だと思いますが、このパスの取得方法ではファイル名の取得ができませんでした。

        let documentPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        guard let fileNames = try? FileManager.default.contentsOfDirectory(atPath: documentPath.absoluteString) else {
            return
        }

documentPathの中身をみてみると以下の様なパスが取得できていました。

"file:///var/mobile/Containers/Data/Application/B5C165F1-D9D4-4E98-A658-FE84E1B260B4/Documents/"

解決方法

パスの取得方法を以下のコードの様に修正したところファイル名を取得することができる様になりました。

        let documentPath = NSHomeDirectory() + "/Documents"
        guard let fileNames = try? FileManager.default.contentsOfDirectory(atPath: documentPath) else {
            return
        }

間違っていたパスと見比べてみるとfile://がついていいるかついていないかが問題だった様です。

Applicationしたの数列はビルド毎に値が変わっていたのでおそらく関係ないと思います。

"/var/mobile/Containers/Data/Application/7BB771F8-CB92-4042-8B70-99329A414885/Documents"

参考文献

【Swift4】コピペで出来るDocumentsフォルダの操作方法(画像の保存編)