删除iPhone沙箱(文档文件夹)中的所有文件?
是否有一种简单的方法来删除我保存在应用程序的文档文件夹中的所有文件(图像)?
NSFileManager *fileMgr = [[[NSFileManager alloc] init] autorelease]; NSError *error = nil; NSArray *directoryContents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]; if (error == nil) { for (NSString *path in directoryContents) { NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:path]; BOOL removeSuccess = [fileMgr removeItemAtPath:fullPath error:&error]; if (!removeSuccess) { // Error handling ... } } } else { // Error handling ... }
代码不能与IOS 7和Xcode 5编辑,以适应我的应用程序。 对@Ole Begemann和@pablasso大分。
-(void)EmptySandbox { NSFileManager *fileMgr = [[NSFileManager alloc] init]; NSError *error = nil; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *files = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:nil]; while (files.count > 0) { NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *directoryContents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]; if (error == nil) { for (NSString *path in directoryContents) { NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:path]; BOOL removeSuccess = [fileMgr removeItemAtPath:fullPath error:&error]; files = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:nil]; if (!removeSuccess) { // Error } } } else { // Error } } }
对于Swift开发者:
let fileMgr = NSFileManager() let dirPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] if let directoryContents = try? fileMgr.contentsOfDirectoryAtPath(dirPath) { for path in directoryContents { let fullPath = (dirPath as NSString).stringByAppendingPathComponent(path) do { try fileMgr.removeItem(atPath: fullPath) print("Files deleted") } catch let error as NSError { print("Error deleting: \(error.localizedDescription)") } } }
- (void)removeFile { // you need to write a function to get to that directory NSString *filePath = [self getDirectory]; NSFileManager *fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:filePath]) { NSError *error; if (![fileManager removeItemAtPath:filePath error:&error]) { NSLog(@"Error removing file: %@", error); }; } }
我相信这个更短。
斯威夫特2.1与一些额外的:
do { let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) let documentsDirectory = paths[0] let documentsDirectoryURL = NSURL(fileURLWithPath: paths[0]) let directoryContents = try NSFileManager.defaultManager().contentsOfDirectoryAtPath(documentsDirectory) var totalMegaBytes: Double = 0 var nrOfFiles = 0 for filename in directoryContents { let file = documentsDirectoryURL.URLByAppendingPathComponent(filename) let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(file.path!) let fileSize = fileAttributes[NSFileSize] as! Double totalMegaBytes += fileSize/1024/1024 do { try NSFileManager.defaultManager().removeItemAtURL(file) nrOfFiles++ }catch let error as NSError{ print("> Emptying sandbox: could not delete file", filename, error) } } print("> Emptying sandbox: Removed \(nrOfFiles) files with a total of \(round(totalMegaBytes))MB") }catch let error as NSError{ print("> Emptying sandbox: Error emptying sandbox", error) }
NSFileManager *fileMgr = [[[NSFileManager alloc] init] autorelease]; NSError *error = nil; NSArray *directoryContents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]; if (error == nil) { for (NSString *path in directoryContents) { NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:path]; BOOL removeSuccess = [fileMgr removeItemAtPath:fullPath error:&error]; if (!removeSuccess) { // Error handling ... } } } else { // Error handling ... }
它可能不适用于所有情况,但通常将所有文件放在文档目录中的自定义目录中,然后使用removeItemAtPath:error:
删除该目录并重新创build它会更有效。 例如:
// Clear cache NSError *error; [[NSFileManager defaultManager] removeItemAtPath:cacheDirectory error:&error]; if (error) { // error handling } // Create cache directory again NSError *error2; [[NSFileManager defaultManager] createDirectoryAtPath:cacheDirectory withIntermediateDirectories:YES attributes:nil error:&error2]; if (error2) { // error handling }