2011-08-15 142 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]; 
}