I'm trying to get ONLY subdirectories. Here's my data structure.
root/
I want to get directories in a specific folder(root). I use enumerator in root file path:
let enumerator = NSFileManager.defaultManager().enumeratorAtPath(filePath)
for element in enumerator! {
print(element)
}
However, It will iterate every files in root. How can I get just subdirectories (a&b) ?
There is no need to use a deep enumeration. Just get contentsOfDirectoryAtURL and filter the urls returned which are directories.
Xcode 11.4• Swift 5.2
extension URL {
func subDirectories() throws -> [URL] {
// @available(macOS 10.11, iOS 9.0, *)
guard hasDirectoryPath else { return [] }
return try FileManager.default.contentsOfDirectory(at: self, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]).filter(\.hasDirectoryPath)
}
}
usage:
do {
let documentsDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let url = documentsDirectory.appendingPathComponent("pictures", isDirectory: true)
if !FileManager.default.fileExists(atPath: url.path) {
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: false, attributes: nil)
}
let subDirs = try documentsDirectory.subDirectories()
print("sub directories", subDirs)
subDirs.forEach { print($0.lastPathComponent) }
} catch {
print(error)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With