我正在使用以下代碼將文件夾中特定擴展名的文件添加到數組中。將文件添加到子文件夾中的數組
self.fileArray = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys: nil).filter{ filterExtensions.contains($0.pathExtension) }
我需要從所選文件夾/驅動器中的所有子文件夾添加文件。
我該如何做到這一點?
我正在使用以下代碼將文件夾中特定擴展名的文件添加到數組中。將文件添加到子文件夾中的數組
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