FileManager.default.enumerator不返回任何文件

时间:2016-12-20 06:44:53

标签: ios swift

我正在使用XCode 8.2在swift 3.0.2中创建应用程序,我试图通过itunes递归列出与iOS应用程序共享的文件。

目前,以下代码有效:

I am in main process 17900
I am in process 10284
Message.Status: I am here

但是,位于here的contentsOfDirectory的文档声明该函数只执行URL的浅遍历并建议对URL进行深度遍历的函数,即枚举器,其文档位于{{3 }}

我正在使用以下代码段尝试使用深度遍历列出当前网址下的所有文件:

let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
print(documentsUrl.absoluteString)

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

} catch let error as NSError {
    print(error.localizedDescription)
}

问题在于,当第一个片段显示文件URL时,第二个片段不会显示任何内容。

有人可以建议我该怎么做才能解决这个问题?我真的想使用第二个代码段,而不是尝试使用第一个函数进行解决方法。

1 个答案:

答案 0 :(得分:5)

FileManager有两种获取目录枚举器的方法:

第一个返回一个枚举 strings 的枚举器 (文件路径),第二个返回一个枚举器 枚举 URL。

您的代码使用基于URL的枚举器,因此是条件的 强制转换为as? String失败,不会产生任何输出。

您必须转而使用URL

if let dirContents = FileManager.default.enumerator(at: documentsUrl.resolvingSymlinksInPath(), includingPropertiesForKeys: nil) {

    while let url = dirContents.nextObject() as? URL {
        print(url.path)
    }
}

您也可以使用for循环进行迭代:

if let dirContents = FileManager.default.enumerator(at: documentsUrl.resolvingSymlinksInPath(), includingPropertiesForKeys: nil) {

    for case let url as URL in dirContents {
        print(url.path)
    }
}