将文件添加到子文件夹中的数组
问题描述:
我正在使用以下代码将文件夹中特定扩展名的文件添加到数组中。将文件添加到子文件夹中的数组
self.fileArray = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil).filter{ filterExtensions.contains($0.pathExtension) }
我需要从所选文件夹/驱动器中的所有子文件夹添加文件。
我该如何做到这一点?
答
你可以得到这样的:
let enumerator = try FileManager.default.enumerator(at: url, includingPropertiesForKeys: nil)!.allObjects
self.fileArray = enumerator.filter { filterExtensions.contains(($0 as! URL).pathExtension) } as! [URL]
答
你可以得到URL资源键isRegularFileKey检查,如果枚举网址是一个普通文件。您还可以设置跳过隐藏的文件和包后裔的选项,否则也将复制隐藏文件像.DS_Store:
let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
var files: [URL] = []
FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: [], options: [.skipsHiddenFiles, .skipsPackageDescendants])?.forEach {
if let url = $0 as? URL, (try? url.resourceValues(forKeys: [.isRegularFileKey]))?.isRegularFile == true {
files.append(url)
}
}
你也可以得到所有的物体从枚举返回,有条件地扔然后过滤符合条件的网址:
if let files = (FileManager.default.enumerator(at: documentsDirectory, includingPropertiesForKeys: [], options: [.skipsHiddenFiles, .skipsPackageDescendants])?.allObjects as? [URL])?
.filter({
(try? $0.resourceValues(forKeys: [.isRegularFileKey]))?.isRegularFile == true
}) {
print(files.count)
}
将检查并取回.. – techno
@LeoDabus上述答案正确吗? – techno