Как я могу удалить plist программно? - PullRequest
6 голосов
/ 15 августа 2011

Я хочу удалить весь файл 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];
}  

Ответы [ 4 ]

16 голосов
/ 15 августа 2011

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 голосов
/ 15 августа 2011

Вот как.

    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];
0 голосов
/ 19 марта 2017

Это удалит все файлы в папке с документами.Если приложение хранит файлы, которые вы не хотите удалять, в этом каталоге добавьте код, чтобы убедиться, что эти файлы не удалены.

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 голосов
/ 06 февраля 2017

Вот так мне удалось удалить все старые списки, кроме текущего, который у меня был. Это в 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)")
    }
}

Полагаю, код может быть лучше, даже если он функционален. Если у кого-то есть идеи, пожалуйста, поделитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...