2011-08-15 24 views
6

Tüm plist dosyasını dosya sisteminden program aracılığıyla silmek istiyorum. Bunu nasıl yapabilirim?Bir plist programatik olarak nasıl silebilirim?

Bu benim plist yazıyorum nasıl:

+ (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]; 
} 

cevap

16

NSFileManager Eğer bu ben vardı şimdiki dışındaki tüm eski Mülk Listelerini silmek başardınız nasıl 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 
    } 
} 
3

İşte nasıl.

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

Hata null olmak istemezsiniz, eğer varsa, hatayı ele alması durumunda Joe'nun yaptığı gibi bir şey yapmak istersiniz. –

0

kullanarak dosyayı silmek sağlayacaktır. Bu Swift 3öyle:

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

Ben işlevsel olsa da, kod iyi olabilir varsayalım. Herhangi bir fikir varsa, lütfen paylaşın.

0

Bu, belge klasöründeki tüm dosyaları siler. Uygulama bu dizinde silmek istemediğiniz dosyaları saklarsa, dosyaların silinmediğinden emin olmak için kod ekleyin.

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]; 
} 
İlgili konular