Delete specified file from document directory

前端 未结 10 917
礼貌的吻别
礼貌的吻别 2020-12-02 06:18

I want to delete an image from my app document directory. Code I have written to delete image is:

 -(void)removeImage:(NSString *)fileName
{
    fileManag         


        
相关标签:
10条回答
  • 2020-12-02 06:25

    If you are interesting in modern api way, avoiding NSSearchPath and filter files in documents directory, before deletion, you can do like:

    let fileManager = FileManager.default
    let keys: [URLResourceKey] = [.nameKey, .isDirectoryKey]
    let options: FileManager.DirectoryEnumerationOptions = [.skipsHiddenFiles, .skipsPackageDescendants]
    guard let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask).last,
          let fileEnumerator = fileManager.enumerator(at: documentsUrl,
                                                      includingPropertiesForKeys: keys,
                                                      options: options) else { return }
    
    let urls: [URL] = fileEnumerator.flatMap { $0 as? URL }
                                    .filter { $0.pathExtension == "exe" }
    for url in urls {
       do {
          try fileManager.removeItem(at: url)
       } catch {
          assertionFailure("\(error)")
       }
    }
    
    0 讨论(0)
  • 2020-12-02 06:26

    In Swift both 3&4

     func removeImageLocalPath(localPathName:String) {
                let filemanager = FileManager.default
                let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] as NSString
                let destinationPath = documentsPath.appendingPathComponent(localPathName)
     do {
            try filemanager.removeItem(atPath: destinationPath)
            print("Local path removed successfully")
        } catch let error as NSError {
            print("------Error",error.debugDescription)
        }
        }
    

    or This method can delete all local file

    func deletingLocalCacheAttachments(){
            let fileManager = FileManager.default
            let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
            do {
                let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
                if fileURLs.count > 0{
                    for fileURL in fileURLs {
                        try fileManager.removeItem(at: fileURL)
                    }
                }
            } catch {
                print("Error while enumerating files \(documentsURL.path): \(error.localizedDescription)")
            }
        }
    
    0 讨论(0)
  • 2020-12-02 06:33

    Swift 2.0:

    func removeOldFileIfExist() {
        let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
        if paths.count > 0 {
            let dirPath = paths[0]
            let fileName = "someFileName"
            let filePath = NSString(format:"%@/%@.png", dirPath, fileName) as String
            if NSFileManager.defaultManager().fileExistsAtPath(filePath) {
                do {
                    try NSFileManager.defaultManager().removeItemAtPath(filePath)
                    print("old image has been removed")
                } catch {
                    print("an error during a removing")
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-02 06:33

    You can double protect your file removal with NSFileManager.defaultManager().isDeletableFileAtPath(PathName) As of now you MUST use do{}catch{} as the old error methods no longer work. isDeletableFileAtPath() is not a "throws" (i.e. "public func removeItemAtPath(path: String) throws") so it does not need the do...catch

    let killFile = NSFileManager.defaultManager()
    
                if (killFile.isDeletableFileAtPath(PathName)){
    
    
                    do {
                      try killFile.removeItemAtPath(arrayDictionaryFilePath)
                    }
                    catch let error as NSError {
                        error.description
                    }
                }
    
    0 讨论(0)
  • 2020-12-02 06:34

    I want to delete my sqlite db from document directory.I delete the sqlite db successfully by below answer

    NSString *strFileName = @"sqlite";
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    
    NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:NULL];
    NSEnumerator *enumerator = [contents objectEnumerator];
    NSString *filename;
    while ((filename = [enumerator nextObject])) {
        NSLog(@"The file name is - %@",[filename pathExtension]);
        if ([[filename pathExtension] isEqualToString:strFileName]) {
           [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL];
            NSLog(@"The sqlite is deleted successfully");
        }
    }
    
    0 讨论(0)
  • 2020-12-02 06:34
        NSError *error;
        [[NSFileManager defaultManager] removeItemAtPath:new_file_path_str error:&error];
        if (error){
            NSLog(@"%@", error);
        }
    
    0 讨论(0)
提交回复
热议问题