2010-02-09 3 views

Trả lời

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

tôi để nó tùy thuộc vào bạn để làm điều gì đó hữu ích với các lỗi nếu nó tồn tại.

+1

@ m1neral: đây phải là một nhận xét, không phải chỉnh sửa – abatishchev

+0

Tôi đã khôi phục nó vì nó không chính xác. – coneybeare

+20

Nói chung, bạn có lẽ nên sử dụng 'stringByAppendingPathComponent' thay vì' stringWithFormat' để nối các đường dẫn. (Tôi biết các tác phẩm trên, nhưng chỉ vì dấu gạch chéo cứng được mã hóa của bạn trong '@" Ảnh/"'.) – zekel

16

nếu bạn muốn gỡ bỏ những file và thư mục riêng của mình sau đó sử dụng nó mà không 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 
} 
12

tương tự cho những người yêu thích nhanh chóng:

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

Làm việc đối với tôi cám ơn chỉ cần một thay đổi nhỏ, Cảm ơn –

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

Nó không nên sau khi thử, nếu bạn đang sử dụng bắt. Ngoài ra, bạn đang cố xóa tệp theo URL, chứ không phải tất cả các tệp theo đường dẫn. –

+0

Từ Apple: "Cố gắng tìm kiếm hành vi dựa trên trạng thái hiện tại của hệ thống tệp hoặc một tệp cụ thể trên hệ thống tệp không được khuyến nghị", nghĩa là bạn không nên kiểm tra xem tệp có tồn tại hay không trước khi xóa. Bạn chỉ nên thử và xóa tệp và sau đó xử lý lỗi một cách thích hợp. Xem [tài liệu] (https://developer.apple.com/documentation/foundation/filemanager/1415645-fileexists) trên 'fileExists (atPath:)' để biết thêm thông tin. – strikerdude10

0

Hầu hết các câu trả lời cũ hơn bạn có sử dụng contentsOfDirectoryAtPath:error: mà sẽ làm việc, nhưng according to Apple:

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

vì vậy nếu bạn muốn sử dụng NSURL thay vào đó bạn có thể sử dụng phương pháp contentsOfDirectoryAtURL:includingPropertiesForKeys:options:error: vì vậy nó sẽ giống như thế này:

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