Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 删除文档目录中的多个文件_Swift_Nsfilemanager - Fatal编程技术网

Swift 删除文档目录中的多个文件

Swift 删除文档目录中的多个文件,swift,nsfilemanager,Swift,Nsfilemanager,我正在尝试创建一个函数,可以删除文档目录中具有给定文件扩展名的多个文件 到目前为止,我有下面的功能,但我可以在旧版上完成它来删除文件吗 static func searchFilesDocumentsFolder(Extension: String) { let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMas

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

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

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 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)

        }
    }

谢谢,这是有效的,但是,从列表中无法删除一个文件--“20-01-2016_142531.mov”无法删除。知道为什么吗?在这种情况下,该方法会抛出一个错误,您可以调试。它应该告诉您原因,可能该文件是由另一个进程打开的。我能看到的唯一错误是
20-01-2016_142531.mov“无法删除。
问题在于您有一个文件名列表,而不是文件路径列表。您只需删除
.map{$0.lastPathComponent}
抛出的NSError(代码中的错误)有一个错误代码和一个userInfo字典,它应该会告诉您更多信息。如果这不能让你更进一步,你应该发布一个新的问题,这个问题和你的N错误的详细信息
 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)

        }
    }