2015-09-29 3 views
22

Я создал каталог Temp для хранения файлов:Удалить файлы из каталога внутри каталога документа?

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

Это прекрасно, теперь я хочу, чтобы удалить все файлы, находящиеся в директории ... Я попытался, как показано ниже:

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

Я замечаю, что файлы все еще там ... Что я делаю неправильно?

+0

Вы должны обновить Xcode. –

+0

почему ???? его 6.4 .. –

+0

В противном случае вы останетесь позади. Вы всегда должны быть, по крайней мере, с помощью версии магазина Apple –

ответ

14

Две вещи, используйте каталог temp и затем отправьте сообщение об ошибке fileManager.removeItemAtPath и поместите его в if, чтобы узнать, что не удалось. Также вы не должны проверять, установлена ​​ли ошибка, а есть ли методы возвращать данные.

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

Чтобы получить правильный временный каталог использовать NSTemporaryDirectory()

+0

спасибо, я получаю эту ошибку, поскольку не удалось удалить файл: 0x0000000000000000 –

+0

Хм, это нулевой указатель, можете ли вы получить путь, отсортированный в 'fullPath'? возможно, там есть проблема. – rckoenes

+1

Я нашел свою ошибку благодаря .... –

33

В случае, если кто нуждается в этом для последних версий Swift/Xcode: вот пример, чтобы удалить все файлы из папки Temp:

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.x и 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)") 
    } 
} 
+0

Как я могу получить путь из определенной папки? –

+0

@amirt Можете ли вы добавить новый вопрос?Это другая тема, и вам нужно немного больше объяснений с вашей стороны. – joern

12

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)") 
    } 
} 
4

Swift 4,0 пример, который удаляет все файлы из папки, например "diskcache" в каталоге документов. Я нашел приведенные выше примеры неясными, потому что они использовали NSTemporaryDirectory() + filePath, который не является «URL-адресом». Для вашего удобства:

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) 
     } 
    } 
+0

приятно это полезно для быстрого 4, может подтвердить, что он работает! – VTS12

Смежные вопросы