【问题标题】:Delete multiple files in Document Directory删除文档目录中的多个文件
【发布时间】:2016-04-29 15:31:54
【问题描述】:

我正在尝试创建一个函数,该函数可以删除文档目录中具有给定文件扩展名的多个文件。

到目前为止,我有以下功能,但我可以在旧版本上完成它以删除找到的文件吗?

static func searchFilesDocumentsFolder(Extension: String) {

        let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

        do {
            let directoryUrls = try  NSFileManager.defaultManager().contentsOfDirectoryAtURL(documentsUrl, includingPropertiesForKeys: nil, options: NSDirectoryEnumerationOptions())
            //print(directoryUrls)
            let Files = directoryUrls.filter{ $0.pathExtension == Extension }.map{ $0.lastPathComponent }
            print("\(Extension) FILES:\n" + Files.description)
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }

【问题讨论】:

    标签: swift nsfilemanager


    【解决方案1】:

    对于 Swift 3 和 Swift 4.0

     let fileManager : FileManager = FileManager.default
        let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
        let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
        let paths : NSArray = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) as NSArray
        let documentsDirectory = paths.object(at: 0) as! NSString
        print(documentsDirectory)
        let contents : NSArray =  try! fileManager.contentsOfDirectory(atPath: documentsDirectory as String) as NSArray
        let enumerator : NSEnumerator = contents.objectEnumerator()
        while let element = enumerator.nextObject() as? String
        {
            let fileName = element as NSString
            if fileName.pathExtension == "m4a"
            {
                let pathOfFile = documentsDirectory.appendingPathComponent(fileName as String)
                try! fileManager.removeItem(atPath: pathOfFile)
    
            }
        }
    

    【讨论】:

      【解决方案2】:
      for file in Files {
          try NSFileManager.defaultManager().removeItemAtPath(file)
      }
      

      【讨论】:

      • 谢谢,但是这有效,从列表中无法删除一个文件 --- “20-01-2016_142531.mov”无法删除。知道为什么吗?
      • 在这种情况下,该方法应该会抛出一个错误,您可以对其进行调试。它应该告诉你原因,可能文件被另一个进程打开了。
      • 我能看到的唯一错误是"20-01-2016_142531.mov” couldn’t be removed.
      • 问题在于你有一个文件名列表,而不是文件路径列表。你可以简单地删除.map{$0.lastPathComponent}
      • 抛出的 NSError(代码中的错误)有一个错误代码和一个应该告诉您更多信息的 userInfo 字典。如果这不能让你更进一步,你应该发布一个关于这个问题的新问题以及你的 NSError 的详细信息
      猜你喜欢
      • 2023-04-03
      • 2011-08-06
      • 2013-02-07
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多