【问题标题】:Get All folder names from a path in documents directory swift快速从文档目录中的路径获取所有文件夹名称
【发布时间】:2015-09-20 12:16:17
【问题描述】:

我正在尝试获取一个[String],其中包含我在文档目录中创建的文件夹中所有文件夹的名称。我目前有一些工作,但它也在迭代这些目录中的所有内容并给我文件的名称。

目前我有这个:

let file_manager = NSFileManager.defaultManager()
let enumerator:NSDirectoryEnumerator? = file_manager.enumeratorAtPath(getDocumentsFilePath("Test"))
while let element = enumerator?.nextObject() as? String
{
      // Add folder names to the return value
      return_value.insert(element, atIndex: return_value.count)
}

但正如我所说,这也给了我目录中文件的名称。

我发现这段代码似乎是我正在寻找的,但它似乎可以在 NSParentSearchPathDirectory 上工作,但这似乎会给我文档目录中的所有目录名称。想知道这是否是我正在寻找的,但如果是这样,我如何将我的字符串(我想要目录名称的文件夹的路径)转换为 NSParentSearchPathDirectory。或者,如果我的第一个示例是正确的,我将如何让它只返回目录而不是文件名。

NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory NSSearchPathDomainMask.AllDomainsMask, true) as? [String]

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    这是一个简单的函数,您可以使用它来获取特定目录中所有内容的路径。

    func contentsOfDirectoryAtPath(path: String) -> [String]? {
        guard let paths = try? NSFileManager.defaultManager().contentsOfDirectoryAtPath(path) else { return nil}
       return paths.map { aContent in (path as NSString).stringByAppendingPathComponent(aContent)}
    }
    
    let searchPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
    
    let allContents = contentsOfDirectoryAtPath(searchPath)
    

    【讨论】:

    • 太棒了,这正是我想要的谢谢:)
    【解决方案2】:

    这是另一种没有字符串操作的方法:

    var subdirs = [NSURL]()
    
    let enumerator = NSFileManager.defaultManager().enumeratorAtURL(
        NSURL.init(fileURLWithPath: "/System/Library", isDirectory: true),
        includingPropertiesForKeys: [NSURLIsDirectoryKey],
        options: .SkipsSubdirectoryDescendants,
        errorHandler: nil)
    
    while let url = enumerator?.nextObject() as? NSURL {
        do {
            var resourceValue: AnyObject?
            try url.getResourceValue(&resourceValue, forKey: NSURLIsDirectoryKey)
            if let isDirectory = resourceValue as? Bool where isDirectory == true {
                subdirs.append(url)
            }
        }
        catch let error as NSError {
            print("Error: ", error.localizedDescription)
        }
    }
    

    【讨论】:

      【解决方案3】:

      在 Swift 4.0 中

      func contentsOfDirectoryAtPath(path: String) -> [String]? {
              guard let paths = try? FileManager.default.contentsOfDirectory(atPath: path) else { return nil}
              return paths.map { aContent in (path as NSString).appendingPathComponent(aContent)}
          }
          func getListOfDirectories()->[String]?{
      
              let searchPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last!
              let allContents = contentsOfDirectoryAtPath(path: searchPath)
              return allContents
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 2014-07-09
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-04-13
        相关资源
        最近更新 更多