从目录中读取所有文件?

时间:2018-01-25 09:16:22

标签: swift

我正在尝试在我的资源中创建一个文件夹,然后获取其中的文件列表。 听起来很简单但没有关于如何做到这一点的干净答案。

  1. 即使从主目录中获取列表,大多数人也无法在Swift 3上进行操作,请在此处阅读:Getting list of files in documents folder
  2. 使用:

    let fileMngr = FileManager.default;
    
        // Full path to documents directory
        let docs = fileMngr.urls(for: .documentDirectory, in: .userDomainMask)[0].path
    
        // List all contents of directory and return as [String] OR nil if failed
        return try? fileMngr.contentsOfDirectory(atPath:docs)
    

    不工作。

    1. 从特定文件夹中读取,我无法理解如何获取swift的路径。
    2. 任何真正有效的文件从文件夹中读取?

3 个答案:

答案 0 :(得分:5)

如果您想将所有文件都放在个人目录中,这是一个简单的答案

    do {
        let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
        let Path = documentURL.appendingPathComponent("yourDirectoyName").absoluteURL
        let directoryContents = try FileManager.default.contentsOfDirectory(at: Path, includingPropertiesForKeys: nil, options: [])
    }
    catch {
        print(error.localizedDescription)
    }

然后,如果您想要阅读具有特殊扩展名的所有文件,您可以这样做

    static func listAllFileNamesExtension(nameDirectory: String, extensionWanted: String) -> (names : [String], paths : [URL]) {

    let documentURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let Path = documentURL.appendingPathComponent(nameDirectory).absoluteURL

    do {
        try FileManager.default.createDirectory(atPath: Path.relativePath, withIntermediateDirectories: true)
        // Get the directory contents urls (including subfolders urls)
        let directoryContents = try FileManager.default.contentsOfDirectory(at: Path, includingPropertiesForKeys: nil, options: [])

        // if you want to filter the directory contents you can do like this:
        let FilesPath = directoryContents.filter{ $0.pathExtension == extensionWanted }
        let FileNames = FilesPath.map{ $0.deletingPathExtension().lastPathComponent }

        return (names : FileNames, paths : FilesPath);

    } catch {
        print(error.localizedDescription)
    }

    return (names : [], paths : [])
}

因此,如果您想将所有儿子档案放在您的个人目录中

let allJsonNamePath = listAllFileNamesExtension(nameDirectory:"yourDirectoryName", extensionWanted: "json")

答案 1 :(得分:3)

迅速4/5

    let documentDirectoryPath:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
    let myFilesPath = "\(documentDirectoryPath)/myfolder"
    let filemanager = FileManager.default
    let files = filemanager.enumerator(atPath: myFilesPath)
    while let file = files?.nextObject() {
        print(file)
    }

答案 2 :(得分:0)

实际上,令人惊讶的是,2天没有人能告诉我这里真正的问题。 创建文件夹拖入项目完全不同。

出于某种原因,对于Apple来说,它总是复杂的文件。我必须弄清楚不那么直观的方法,一个看起来像文件夹的组,只是一种很好的方式来查看某些东西,不会创建文件管理器可访问的真实文件夹。

这种奇怪的方法对于一个非常专业的程序员来说可能是偶然的,但对任何一个简单的人来说都是如此。

简单地说,在Xcode外面创建一个 blue 文件夹并将其拖入。