【问题标题】:Read all files from a directory?从目录中读取所有文件?
【发布时间】:2018-07-04 11:46:37
【问题描述】:

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

  1. 即使从主目录中获取列表,大多数人在 Swift 3 上也做不到,请阅读此处:Getting list of files in documents folder

使用:

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. 从特定文件夹读取,我无法理解如何快速获取它的路径。

任何真正有效的从文件夹读取的示例?

【问题讨论】:

  • 什么不起作用?为什么忽略try? 的潜在错误。请记住,SO 不是为那些懒得学东西(例如阅读文档)的人设计的代码工厂

标签: swift nsfilemanager


【解决方案1】:

斯威夫特 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】:

    如果你想获取个人目录中的所有文件,这里是简单的答案

        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 : [])
    }
    

    所以如果你想把所有的 json 文件放在你的个人目录中

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

    【讨论】:

    • 不确定如何使用您的答案,我将如何在一行中读取名为“me”的文件夹中的所有文件?
    • 尽管我有一个装满 png 文件的文件夹,但它什么也没打印。
    • 如果您只想将所有文件放在一个目录中,我只是编辑了帖子以获得更简单的答案
    • 我刚刚编辑了工作编译版本。昨天匆匆忙忙做了,但是你真的应该尝试自己解决错误,错误真的不大。
    • @Curnelious SO 不是代码编写服务——它是一个学习的地方。如果答案中的代码没有编译,也许在抱怨之前尝试修复它?查看代码,看看它试图实现什么,然后使用这些信息自己编写一些东西。
    【解决方案3】:

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

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

    这种奇怪的方法对于非常专业的程序员来说可能是直觉的,但对于任何简单的人来说确实不是。

    简单来说,在Xcode外面新建一个blue文件夹,拖进去。

    【讨论】:

    • 也许如果你的问题和 cmets 不那么粗鲁,人们会更快地帮助你。
    • @AshleyMills fwiw 我不觉得他的 cmets 粗鲁。他有点沮丧:区别很重要,因为你的评论表明他在抨击别人
    • @javadba 你看不到这里的历史... 许多 来自 OP 的 cmets 被报告和删除(他现在被停职 10 年,看起来)
    • 好的 - 显然,如果没有证据,我无法确定。报告的多个 cmets 不好 .. 我看到了暂停 - 哇 ..
    猜你喜欢
    • 2013-06-20
    • 2013-12-02
    • 2019-11-13
    • 2021-11-06
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多