繁体   English   中英

无法从应用程序文档文件夹中删除文件

[英]unable to delete file from the app documents folder

使用Swift 3,我正在将视频文件写入documents文件夹。 这是文件的路径。

file:///var/mobile/Containers/Data/Application/D031AB20-CB7E-4B14-9483-E7C3F4C0EC55/Documents/output11:10:04.mov

现在我想使用filemanager再次删除该文件。 我从avassetwriter检索上面的路径,并使用outputurl定义的outputurl使用filemanager删除文件。

let fileManager = FileManager.default

   do {
       try fileManager.removeItem(at: (self.assetWriter?.outputURL)!)
      } catch let err {
        print(err)
      }

但我得到一个错误,即没有这样的文件或目录。 使用self.assetWriter?.outputURL.path给我同样的错误。

错误域= NSCocoaErrorDomain代码= 4“无法删除“ output11 / 10 / 04.mov”。 UserInfo = {NSFilePath = / var / mobile / Containers / Data / Application / D031AB20-CB7E-4B14-9483-E7C3F4C0EC55 / Documents / output11:10:04.mov,NSUserStringVariant =(Remove),NSUnderlyingError = 0x174240150 {Error Domain = NSPOSIXErrorDomain代码= 2“没有这样的文件或目录”}}

不要在文件名中使用冒号。

(出于传统原因),操作系统将它们视为路径分隔符,并用斜杠替换。

首先检查天气文件是否在此路径下(如果不存在),然后将其删除:-

let file_manager = FileManager.init()
        if let url = self.assetWriter?.outputURL{
            if file_manager.fileExists(atPath: url.path){
                if file_manager.isDeletableFile(atPath: url.path){
                    do {
                        try file_manager.removeItem(at: url)
                    } catch let err {
                        print(err.localizedDescription)
                    }
                }
            }
        }

从开始删除“ file://”字符串。

 let path = documentPathValue.replacingOccurrences(of: "file://", with: "")

完整的代码

 func clearAllFilesFromDirectory() {

    let fileManager = FileManager.default
    let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as NSURL
    let documentsPath = documentsUrl.path

    do {
        if let documentPathValue = documentsPath{

            let path = documentPathValue.replacingOccurrences(of: "file://", with: "")
            let fileNames = try fileManager.contentsOfDirectory(atPath: "\(path)")
            print("all files in cache: \(fileNames)")

            for fileName in fileNames {

                let tempPath = String(format: "%@/%@", path, fileName)

                //Check for specific file which you don't want to delete. For me .sqlite files
                if !tempPath.contains(".sql") {
                    try fileManager.removeItem(atPath: tempPath)
                } 
            }
        }

    } catch {
        print("Could not clear document directory \(error)")
    }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM