Как удалить ВСЕ ФАЙЛЫ в указанном каталоге в приложении? - PullRequest
46 голосов
/ 09 февраля 2010

Учитывая каталог [[self documentsDirectory] stringByAppendingPathComponent:@"Photos/"] как мне удалить ВСЕ ФАЙЛЫ в этой папке?

(допустим правильный путь к каталогу документов)

Ответы [ 5 ]

114 голосов
/ 09 февраля 2010
NSFileManager *fm = [NSFileManager defaultManager];
NSString *directory = [[self documentsDirectory] stringByAppendingPathComponent:@"Photos/"];
NSError *error = nil;
for (NSString *file in [fm contentsOfDirectoryAtPath:directory error:&error]) {
    BOOL success = [fm removeItemAtPath:[NSString stringWithFormat:@"%@%@", directory, file] error:&error];
    if (!success || error) {
        // it failed.
    }
}

Я оставляю за вами возможность сделать что-нибудь полезное с ошибкой, если она существует.

16 голосов
/ 11 апреля 2012

, если вы хотите удалить файлы и сам каталог, используйте его без for loop

NSFileManager *fm = [NSFileManager defaultManager];
NSString *directory = [[self documentsDirectory] stringByAppendingPathComponent:@"Photos"];
NSError *error = nil;
BOOL success = [fm removeItemAtPath:cacheImageDirectory error:&error];
if (!success || error) {
    // something went wrong
}
13 голосов
/ 18 января 2016

то же самое для любителей быстрого:

let fm = FileManager.default
do {
  let folderPath = "...my/folder/path"
  let paths = try fm.contentsOfDirectory(atPath: folderPath)
  for path in paths
  {
    try fm.removeItem(atPath: "\(folderPath)/\(path)")
  }
} catch {
  print(error.localizedDescription)
}
2 голосов
/ 04 февраля 2018

В большинстве старых ответов вы используете contentsOfDirectoryAtPath:error:, который будет работать, но в соответствии с Apple :

«Предпочтительный способ указать местоположение файла или каталога - использовать класс NSURL»

поэтому, если вы хотите использовать вместо этого NSURL, вы можете использовать метод contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error:, чтобы он выглядел примерно так:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray<NSURL*> *urls = [fileManager contentsOfDirectoryAtURL:directoryURL includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil];

    for (NSURL *url in urls)
    {
        NSError *error = nil;
        BOOL success = [fileManager removeItemAtURL:url error:error];
        if (!success || error) {
            // something went wrong
        }
    }
0 голосов
/ 04 января 2018

Swift 4

  do {

        let destinationLocation:URL = ...

        if FileManager.default.fileExists(atPath: destinationLocation.path) {
            try! FileManager.default.removeItem(at: destinationLocation)
        }

    } catch {
    print("Error \(error.localizedDescription)")
    }
...