Delete files from directory inside Document directory?

前端 未结 8 801
不思量自难忘°
不思量自难忘° 2020-12-24 01:48

I have created a Temp directory to store some files:

//MARK: -create save delete from directory
func createTempDirectoryToStoreFile(){
    var error: NSError         


        
相关标签:
8条回答
  • 2020-12-24 02:18

    After research, I find this perfect solution,

    You can delete all files & folders, this will skip hidden files (for example, .DS_Store)

    func clearCache(){
        let fileManager = FileManager.default
        do {
            let documentDirectoryURL = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
            let fileURLs = try fileManager.contentsOfDirectory(at: documentDirectoryURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
            for url in fileURLs {
               try fileManager.removeItem(at: url)
            }
        } catch {
            print(error)
        }
    }
    
    0 讨论(0)
  • 2020-12-24 02:20

    Two things, use the temp directory and second pass an error to the fileManager.removeItemAtPath and place it in a if to see what failed. Also you should not be checking if the error is set but rather whether a methods has return data.

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

    To get the correct temporary directory use NSTemporaryDirectory()

    0 讨论(0)
  • 2020-12-24 02:20

    Using Files

    https://github.com/JohnSundell/Files

        do {
            for folder:Folder in (FileSystem().documentFolder?.subfolders)! {
                try folder.delete()
            }
        } catch _ {
            print("Error")
        }
    
    0 讨论(0)
  • 2020-12-24 02:24

    In case anyone needs this for the latest Swift / Xcode versions: here is an example to remove all files from the temp folder:

    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 and 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)
  • 2020-12-24 02:25

    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)")
        }
    }
    
    0 讨论(0)
  • 2020-12-24 02:26

    Swift 4.0 example that removes all files from an example folder "diskcache" in the documents directory. I found the above examples unclear because they used the NSTemporaryDirectory() + filePath which is not "url" style. For your convenience:

        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 讨论(0)
提交回复
热议问题