2011-08-15 24 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

エラーが発生したくない場合は、エラーが存在する場合、エラーを処理している場所でJoeがやっていることをしたいと思うでしょう。 –

0

を使用してファイルを削除することができます。それは、スウィフト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]; 
} 
関連する問題