列出(仅)文件夹中的子文件夹-Swift 3.0 / iOS 10

Con*_*ers 3 subdirectory ios swift

我试图获取文件夹(应用程序的Documents目录,在下面的示例中)中所有子文件夹的列表。下面的代码成功地找到了文件夹中的所有内容(文件和文件夹都存在),并且还找到了具有指定.text扩展名的文件,但是我无法将结果缩小为子目录的列表。

let filemgr = FileManager.default
var dirPaths = filemgr.urls(for: .documentDirectory, in: .userDomainMask)
myDocumentsDirectory = dirPaths[0]

var r = "Directory Listing:\n------------------\n" // r = will be returned (or displayed in this case)

do {
    let directoryContents = try FileManager.default.contentsOfDirectory(at: myDocumentsDirectory, includingPropertiesForKeys: nil, options: [])

    // all files -- works fine
    let allFileNames = directoryContents.map{ $0.deletingPathExtension().lastPathComponent }
    r += "All file names:\n\(allFileNames)\n\n"

    // filtering for text files -- also works fine
    let textFiles = directoryContents.filter{ $0.pathExtension == "text" }
    let textFileNames = textFiles.map{ $0.deletingPathExtension().lastPathComponent }
    r += "text file list:\n\(textFileNames)\n\n"

    // Look for folders within the folder -- fails, nothing returned            
    let subdirs = directoryContents.filter{ !$0.isFileURL }
    let subdirNames = subdirs.map{ $0.deletingPathExtension().lastPathComponent }

    r += "Subdirectories:\n\(subdirNames)\n\n"
    textView.text = r

} catch let error as NSError {
    print(error.localizedDescription)
Run Code Online (Sandbox Code Playgroud)

我可以通过将过滤器设置为选择所有目录

$0.pathExtension == ""
Run Code Online (Sandbox Code Playgroud)

但这还可以拾取目录中没有扩展名的任何文件-即它正确地排除foo.bar了文件foo,但错误地将文件和文件夹一起包括在内,而这不是我所需要的- 只能是目录,此而已。

另外,我并不想在子文件夹中更深入地研究子文件夹,仅是我在这里寻找的“这里”。

任何建议将不胜感激!

Fah*_*him 6

您可以在第6行的方法调用中传递URLResourceKey.isDirectoryKeyincludingPropertiesForKeys参数contentsOfDirectory。这应该为所有返回的URL返回该特定属性。然后,您可以检查属性以查看每个URL是用于目录还是文件...

如果您想知道如何获取获取的URL的属性,请查看该类的resourceValues方法URL:)