Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
652 views
in Technique[技术] by (71.8m points)

listing all files in a folder recursively with swift

I'm learning swift and wondering what's the best way to list all files with absolute path in a directory including ones from subfolders(files only)

I tried with following, but it seems listing all contents names even folder names without full paths.

let paths = FileManager.default.subpaths(atPath: folderPath)
    for p in paths! {
       print p
    }
}

as well as

let items = try fm.contentsOfDirectory(atPath: folderPath)

googling didn't come out with any working methods.

this is for macOS 10.14

any help is appreciated!

thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

FileManager has also a method for a deep search: enumerator(at:includingPropertiesForKeys:options:errorHandler:)

To get only the files you have to iterate the enumerator and filter the files

let url = URL(fileURLWithPath: "/path/to/directory")
var files = [URL]()
if let enumerator = FileManager.default.enumerator(at: url, includingPropertiesForKeys: [.isRegularFileKey], options: [.skipsHiddenFiles, .skipsPackageDescendants]) {
    for case let fileURL as URL in enumerator {
        do {
            let fileAttributes = try fileURL.resourceValues(forKeys:[.isRegularFileKey])
            if fileAttributes.isRegularFile! {
                files.append(fileURL)
            }
        } catch { print(error, fileURL) }
    }
    print(files)
}

It's highly recommended to use URLs rather than string paths.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...