只获取没有目录的文件的URL

时间:2017-11-22 13:03:44

标签: swift nsfilemanager

如何获取网址中文件的网址?

我试过这些:

directoryContents = try FileManager.default.contentsOfDirectory(at: aURL, includingPropertiesForKeys: [URLResourceKey.isRegularFileKey], options: [])

...contentsOfDirectory(at: aURL, includingPropertiesForKeys: nil, options: []).filter{ $0.isFileURL })

两个结果都等于

...contentsOfDirectory(at: aURL, includingPropertiesForKeys: nil, options: [])

返回文件和文件夹列表,并获取没有任何过滤器和选项的列表。

此外,我试图仅通过URLResourceKey.isDirectoryKey获取目录,但它不起作用。

如何获取没有目录的文件的URL?

2 个答案:

答案 0 :(得分:7)

出于性能原因,

includingPropertiesForKeys会在遍历目录时从网址检索指定键的信息,但它不是过滤器标准。

您必须filter

明确isDirectory结果
let directoryContents = try FileManager.default.contentsOfDirectory(at: aURL, includingPropertiesForKeys: [.isDirectoryKey])
let filesOnly = directoryContents.filter { (url) -> Bool in
    do {
        let resourceValues = try url.resourceValues(forKeys: [.isDirectoryKey])
        return !resourceValues.isDirectory!
    } catch { return false }
}

print(filesOnly.count)

或者在带有hasDirectoryPath

的macOS 10.11 +,iOS 9.0 +中
let directoryContents = try FileManager.default.contentsOfDirectory(at: aURL, includingPropertiesForKeys: nil)
let filesOnly = directoryContents.filter { !$0.hasDirectoryPath }
print(filesOnly.count)

答案 1 :(得分:0)

我认为:

var urls = try! FileManager.default.contentsOfDirectory(at: localDocumentsURL, includingPropertiesForKeys: nil, options: [])
urls = urls.filter { $0.isFileURL }

在应用控制与应用相关的沙箱目录中存储内容的情况下,对于iOS来说是一个足够好的解决方案。