2011-08-15 147 views
6

我想以编程方式从文件系统中删除我的整个plist文件。我怎样才能做到这一点?如何以编程方式删除plist?

这是我正在写的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]; 
} 

回答

16

NSFileManager将允许您使用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

这里是如何。

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

你不想错误null,你会想要做一些事情,比如Joe处理错误的地方,如果它存在的话。 –

0

这是怎么了,我设法删除除了当前我把所有旧的Plist删除你的文件。这是一个在斯威夫特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)") 
    } 
} 

我想代码可以更好,虽然它的功能。如果有人有任何见解,请分享。

0

这将删除文档文件夹中的所有文件。如果应用程序存储了您不想在此目录中删除的文件,请添加代码以确保这些文件不会被删除。

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