eliminar directorio con como borrar archivos archivo ios swift nsfilemanager nsdocumentdirectory

ios - con - eliminar directorio solaris



¿Eliminar archivos del directorio dentro del directorio de documentos? (6)

Creé un directorio Temp para almacenar algunos archivos:

//MARK: -create save delete from directory func createTempDirectoryToStoreFile(){ var error: NSError? let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) let documentsDirectory: AnyObject = paths[0] tempPath = documentsDirectory.stringByAppendingPathComponent("Temp") if (!NSFileManager.defaultManager().fileExistsAtPath(tempPath!)) { NSFileManager.defaultManager() .createDirectoryAtPath(tempPath!, withIntermediateDirectories: false, attributes: nil, error: &error) } }

Está bien, ahora quiero eliminar todos los archivos que están dentro del directorio ... Intenté de la siguiente manera:

func clearAllFilesFromTempDirectory(){ var error: NSErrorPointer = nil let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String var tempDirPath = dirPath.stringByAppendingPathComponent("Temp") var directoryContents: NSArray = fileManager.contentsOfDirectoryAtPath(tempDirPath, error: error)! if error == nil { for path in directoryContents { let fullPath = dirPath.stringByAppendingPathComponent(path as! String) let removeSuccess = fileManager.removeItemAtPath(fullPath, error: nil) } }else{ println("seomthing went worng /(error)") } }

Noto que los archivos todavía están allí ... ¿Qué estoy haciendo mal?


Dos cosas, use el directorio temp y segundo pase un error al fileManager.removeItemAtPath y colóquelo en si para ver qué falló. Además, no debería verificar si el error está establecido, sino si un método tiene datos devueltos.

func clearAllFilesFromTempDirectory(){ var error: NSErrorPointer = nil let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String var tempDirPath = dirPath.stringByAppendingPathComponent("Temp") var directoryContents: NSArray = fileManager.contentsOfDirectoryAtPath(tempDirPath, error: error)? if directoryContents != nil { for path in directoryContents { let fullPath = dirPath.stringByAppendingPathComponent(path as! String) if fileManager.removeItemAtPath(fullPath, error: error) == false { println("Could not delete file: /(error)") } } } else { println("Could not retrieve directory: /(error)") } }

Para obtener el directorio temporal correcto, use NSTemporaryDirectory()


Ejemplo de Swift 4.0 que elimina todos los archivos de una carpeta de ejemplo " diskcache " en el directorio de documentos. Encontré los ejemplos anteriores poco claros porque usaban el NSTemporaryDirectory() + filePath que no es el estilo "url". Por su conveniencia:

func clearDiskCache() { let fileManager = FileManager.default let myDocuments = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! let diskCacheStorageBaseUrl = myDocuments.appendingPathComponent("diskCache") guard let filePaths = try? fileManager.contentsOfDirectory(at: diskCacheStorageBaseUrl, includingPropertiesForKeys: nil, options: []) else { return } for filePath in filePaths { try? fileManager.removeItem(at: filePath) } }


En caso de que alguien necesite esto para las últimas versiones de Swift / Xcode: aquí hay un ejemplo para eliminar todos los archivos de la carpeta temporal:

Swift 2.x:

func clearTempFolder() { let fileManager = NSFileManager.defaultManager() let tempFolderPath = NSTemporaryDirectory() do { let filePaths = try fileManager.contentsOfDirectoryAtPath(tempFolderPath) for filePath in filePaths { try fileManager.removeItemAtPath(tempFolderPath + filePath) } } catch { print("Could not clear temp folder: /(error)") } }

Swift 3.xy Swift 4:

func clearTempFolder() { let fileManager = FileManager.default let tempFolderPath = NSTemporaryDirectory() do { let filePaths = try fileManager.contentsOfDirectory(atPath: tempFolderPath) for filePath in filePaths { try fileManager.removeItem(atPath: tempFolderPath + filePath) } } catch { print("Could not clear temp folder: /(error)") } }



Crear carpeta temporal en el directorio de documentos (Swift 4)

func getDocumentsDirectory() -> URL { // let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) // return paths[0] let fileManager = FileManager.default if let tDocumentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first { let filePath = tDocumentDirectory.appendingPathComponent("MY_TEMP") if !fileManager.fileExists(atPath: filePath.path) { do { try fileManager.createDirectory(atPath: filePath.path, withIntermediateDirectories: true, attributes: nil) } catch { NSLog("Couldn''t create folder in document directory") NSLog("==> Document directory is: /(filePath)") return fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! } } NSLog("==> Document directory is: /(filePath)") return filePath } return fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! }

Eliminar archivos del directorio temporal: (Swift 4)

func clearAllFilesFromTempDirectory(){ let fileManager = FileManager.default do { let strTempPath = getDocumentsDirectory().path let filePaths = try fileManager.contentsOfDirectory(atPath: strTempPath) for filePath in filePaths { try fileManager.removeItem(atPath: strTempPath + "/" + filePath) } } catch { print("Could not clear temp folder: /(error)") } }


Swift 3 :

func clearTempFolder() { let fileManager = FileManager.default let tempFolderPath = NSTemporaryDirectory() do { let filePaths = try fileManager.contentsOfDirectory(atPath: tempFolderPath) for filePath in filePaths { try fileManager.removeItem(atPath: NSTemporaryDirectory() + filePath) } } catch let error as NSError { print("Could not clear temp folder: /(error.debugDescription)") } }