2010-02-09 3 views

Répondre

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

Je laisse à vous de faire quelque chose d'utile avec l'erreur si elle existe.

+1

@ m1neral: cela devrait être un commentaire, pas un edit – abatishchev

+0

Je l'ai roulé comme il était incorrect de toute façon. – coneybeare

+20

En général, vous devriez utiliser 'stringByAppendingPathComponent' à la place de' stringWithFormat' pour concaténer les chemins. (Je sais que ce qui précède fonctionne, mais seulement à cause de votre slash dans '@" Photos/"'.) – zekel

16

si vous souhaitez supprimer des fichiers et le répertoire lui-même utiliser alors sans for boucle

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

même pour les amateurs rapides:

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

a marché pour moi Merci juste besoin d'un peu de modification, Merci –

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

Il ne doit pas être force après essai, si vous utilisez catch. En outre, vous essayez de supprimer le fichier par URL, pas tous les fichiers par chemin. –

+0

D'Apple: "Il est déconseillé de tenter de prédire le comportement en fonction de l'état actuel du système de fichiers ou d'un fichier particulier sur le système de fichiers", ce qui signifie que le fichier n'existe pas avant de le supprimer. Vous devriez simplement essayer de supprimer le fichier, puis gérer l'erreur de manière appropriée. Consultez [la documentation] (https://developer.apple.com/documentation/foundation/filemanager/1415645-fileexists) sur 'fileExists (atPath:)' pour plus d'informations. – strikerdude10

0

La plupart des réponses plus anciennes utilisez-vous?qui fonctionnera, mais according to Apple:

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

donc si vous voulez utiliser NSURL à la place, vous pouvez utiliser la méthode contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: il donc ressembler à ceci:

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 
     } 
    } 
Questions connexes