1. ホーム
  2. ios

[解決済み] ドキュメントフォルダ内のファイル一覧の取得

2022-04-27 01:16:02

質問

ドキュメントフォルダ内のファイル名を取得する私のコードのどこが問題なのでしょうか?

func listFilesFromDocumentsFolder() -> [NSString]?{
    var theError = NSErrorPointer()
    let dirs = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String]
    if dirs != nil {
        let dir = dirs![0] as NSString
        let fileList = NSFileManager.defaultManager().contentsOfDirectoryAtPath(dir, error: theError) as [NSString]
        return fileList
    }else{
        return nil
    }
}

ドキュメントを正しく読んだつもりで、ドキュメントフォルダに何があるかはとても確かなのですが、"fileList"には何も表示されません? "dir" にはフォルダのパスが表示されています。

どうすればいいですか?

このソリューションは Swift 4 (Xcode 9.2)で、また スウィフト5 (Xcode 10.2.1+)です。

let fileManager = FileManager.default
let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
do {
    let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
    // process files
} catch {
    print("Error while enumerating files \(documentsURL.path): \(error.localizedDescription)")
}

これは再利用可能な FileManager 拡張で、結果をスキップしたり隠しファイルを含めたりすることができます。

import Foundation

extension FileManager {
    func urls(for directory: FileManager.SearchPathDirectory, skipsHiddenFiles: Bool = true ) -> [URL]? {
        let documentsURL = urls(for: directory, in: .userDomainMask)[0]
        let fileURLs = try? contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil, options: skipsHiddenFiles ? .skipsHiddenFiles : [] )
        return fileURLs
    }
}

// Usage
print(FileManager.default.urls(for: .documentDirectory) ?? "none")