Как удалить содержимое каталога «Документы» (а не сам каталог «Документы»)? - PullRequest
14 голосов
/ 20 января 2011

Я хочу удалить все файлы и каталоги, содержащиеся в каталоге Documents.

Я считаю, что использование [fileManager removeItemAtPath: documentsDirectoryPath error: nil] метод также удалит каталог документов

Существует ли какой-либо метод, позволяющий удалить только содержимое каталога и оставить там пустой каталог?

Ответы [ 3 ]

48 голосов
/ 20 января 2011

Попробуйте это:

NSString *folderPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSError *error = nil;
for (NSString *file in [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error:&error]) {
    [[NSFileManager defaultManager] removeItemAtPath:[folderPath stringByAppendingPathComponent:file] error:&error];
}
3 голосов
/ 31 июля 2017

Swift 3.x

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
guard let items = try? FileManager.default.contentsOfDirectory(atPath: path) else { return }

for item in items {
    // This can be made better by using pathComponent
    let completePath = path.appending("/").appending(item)
    try? FileManager.default.removeItem(atPath: completePath)
}
1 голос
/ 17 мая 2018

Я думаю, что работа с URL вместо String делает это проще:

private func clearDocumentsDirectory() {
    let fileManager = FileManager.default
    guard let documentsDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first else { return }

    let items = try? fileManager.contentsOfDirectory(at: documentsDirectory, includingPropertiesForKeys: nil)
    items?.forEach { item in
        try? fileManager.removeItem(at: item)
    }
}
...