2010-02-09 18 views

Respuesta

111
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. 
    } 
} 

lo dejo a usted para hacer algo útil con el error si es que existe.

+1

@ m1neral: esto debería ser una comentario, no una edición – abatishchev

+0

Lo rodé hacia atrás ya que era incorrecto de todos modos. – coneybeare

+20

En general, probablemente debería usar 'stringByAppendingPathComponent' en lugar de' stringWithFormat' para concatenar rutas. (Sé que lo anterior funciona, pero solo debido a su barra posterior de código fijo en '@" Fotos/"'.) – zekel

16

si desea eliminar los archivos y el propio directorio y luego utilizarlo sin for bucle

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 
} 
12

misma para los amantes rápidas:

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) 
} 
+0

trabajado para mí Gracias sólo necesitaba una pequeña modificación, Gracias –

0

Swift 4

do { 

     let destinationLocation:URL = ... 

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

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

No debería ser fuerza después de intentar, si está utilizando captura. Además, está intentando eliminar el archivo por URL, no todos los archivos por ruta. –

+0

De Apple: "No se recomienda intentar predicar el comportamiento según el estado actual del sistema de archivos o un archivo en particular en el sistema de archivos", lo que significa que no debe verificar si el archivo existe antes de eliminarlo. Debería tratar de eliminar el archivo y luego manejar el error de manera apropiada. Consulte [la documentación] (https://developer.apple.com/documentation/foundation/filemanager/1415645-fileexists) en 'fileExists (atPath:)' para obtener más información. – strikerdude10

0

La mayoría de las respuestas anteriores hace que uses contentsOfDirectoryAtPath:error: que funcionará, pero according to Apple:

"The preferred way to specify the location of a file or directory is to use the NSURL class"

por lo que si desea utilizar NSURL su lugar puede utilizar el método contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: por lo que sería algo como esto:

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 
     } 
    } 
Cuestiones relacionadas