How can I remove plist programmatically?

I want to delete the entire plist file from the file system programmatically. How can i do this?

This is how I write plist:

+ (void)writeObjectToPList:(id)myData { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mobile-watchlist.plist"]; [myData writeToFile:path atomically:YES]; } 
+6
source share
4 answers

NSFileManager will allow you to delete a file using removeItemAtPath:error:

 + (void)deletePList { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"mobile-watchlist.plist"]; NSError *error; if(![[NSFileManager defaultManager] removeItemAtPath:path error:&error]) { //TODO: Handle/Log error } } 
+16
source

Here is how.

  NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:@"mobile-watchlist.plist"]; [fileManager removeItemAtPath: fullPath error:NULL]; 
+3
source

Here's how I managed to remove all the old plates except the current one that I had. This is in Swift 3 :

 func removeOldPlistFiles() { let fileManager = FileManager.default // get directory with your current plist for comparison later let directory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] let destPath = (dir as NSString).appendingPathComponent("YourCurrentPlistName.plist") // Get the documents directory url let documentsUrl = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! do { // Get the documents directory contents urls (including subfolders urls) let directoryContents = try FileManager.default.contentsOfDirectory(at: documentsUrl, includingPropertiesForKeys: nil, options: []) // filter the directory contents and get file names let plistFiles = directoryContents.filter{ $0.pathExtension == "plist" } let plistFileNames = plistFiles.map{ $0.deletingPathExtension().lastPathComponent } for nameFile in plistFileNames { let dir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] let item = (dir as NSString).appendingPathComponent("\(nameFile).plist") if item != self.destPath! { do { try fileManager.removeItem(atPath: item) } catch let error as NSError { print("FimeManager Remove Item error: \(error.debugDescription)") } } } } catch let error as NSError { print("Directory Contents error: \(error.localizedDescription)") } } 

I assume the code might be better, although it works. If anyone has any ideas, please share.

0
source

This will delete all files in the document folder. If the application stores files that you do not want to delete in this directory, add code to make sure that these files are not deleted.

 NSError *errorGettingAllBanners = nil; for (NSString *file in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] error:&errorGettingAllBanners]) { NSError *errorDeletingAllBanners = nil; [[NSFileManager defaultManager] removeItemAtPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:file] error:&errorDeletingAllBanners]; } 
0
source

Source: https://habr.com/ru/post/895083/


All Articles